グループレイアウトのマージンが機能していないようです。
例えば、
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_margin="40dip"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Button
Android:id="@+id/button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:text="I'm a button" />
</LinearLayout>
すべての辺に40pのマージンを持つボタンを表示する必要があります。ただし、右と下に80pのマージンがあります。
私は何か間違ったことをしていますか?これはバグですか?
回避策は重力を使用することですが、これはマージンでのみ機能します。
ところで、同様の質問 ここに投稿 がありますが、回答されていません。
Android:padding="40dp"
on the LinearLayoutまたはAndroid:layout_margin="40dp"
ボタンを押すと、必要な効果が得られます。パディングはビューの端とそのコンテンツの間のスペースを定義し、レイアウトマージンはビューの側面の余分なスペースを定義します。
問題は実際にはFrameLayout
がマージンを解釈する方法です。 setContentView()
は、「メイン」レイアウトをFrameLayout
にアタッチします。これは、ビュー階層の実際のルート(階層ビューアで確認できます)であり、電話で提供されます。
マージンは親レイアウトによって管理されるため、この場合はメインFrameLayout
です。機能なのかバグなのかはわかりませんが、それがこのレイアウトがマージンを解釈する方法です。
さて、私が入力している間に解決策が既に投稿されていました:代わりにパディングを使用してください。
レイアウトにマージンを設定する必要がある場合は、単にそれを別の線形または相対レイアウトでラップします
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<LinearLayout Android:layout_margin="40dip"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Button Android:id="@+id/button"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:text="I'm a button" />
</LinearLayout>
</LinearLayout>
リニアレイアウトを別のレイアウトでラップすることが最善の方法です。