ここSOで同様の質問を数多く見てきましたが、何も助けになりません。ネストされたさまざまなレイアウトの階層があり、すべてにAndroid:layout_width="fill_parent"
があり、最も内側のレイアウトにAndroid:layout_width="wrap_content
があります-中央に(水平に)配置する必要があります。それ、どうやったら出来るの?
更新::問題の原因が見つかりました-Android:layout_width="fill_parent"
を使用して、内部のLinearLayoutをRelativeLayoutに配置しても、コンテンツをラップします。ただし、TableRowは実際に画面を埋めています。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
これらの2つの属性は一般的に混同されます:
Android:gravity
は、使用されるビューのコンテンツの重要度を設定します。Android:layout_gravity
は、ビューまたはレイアウトの重力を設定します親に対して。そのため、Android:gravity="center"
を親に配置するか、Android:layout_gravity="center"
をLinearLayout自体に配置します。
私は何度もそれらを混ぜて、なぜ物事が適切にセンタリングされなかったのか疑問に思いました...
あなたの線形レイアウトでこれを試してください
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
>
<LinearLayout
Android:orientation="horizontal"
Android:layout_centerHorizontal="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</RelativeLayout>
relativeLayoutをLinearLayoutにラップすることを検討してください。 Android:layout_centerHorizontal="true"
は、ビューの中心を水平に配置します。
layout_gravity="center"
または"center_horizontal"
を親レイアウトに追加します。
ちなみに、LinearLayout
はすでに水平TableRow
であるため、TableRow
内のLinearLayout
は不要なようです。
これは私のために働いた..空のビューを追加..
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:orientation="horizontal"
>
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="1"
/>
<com.google.Android.gms.ads.AdView
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" >
</com.google.Android.gms.ads.AdView>
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="1"
/>
</LinearLayout>
これを試して:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
>
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:layout_gravity="center_horizontal" >
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
<TableRow Android:gravity="center_horizontal">
を試してください。これにより、内部のLinearLayoutがテーブル行内の中央に配置されます。
カスタム通知の設計中にも同じ状況に直面しました。次の属性をtrueに設定して試しました。
Android:layout_centerInParent.
ネストされたRelativeLayoutで作業しているときにこれを経験しました。私の解決策はシンプルになりましたが、知っておく価値のあるちょっとした落とし穴です。
私のレイアウトは...で定義されました.
Android:layout_height="fill_parent"
Android:layout_below="@id/someLayout
Android:gravity="center"
...しかし、この下のレイアウトがその上に配置されるとは思いませんでした。このレイアウト内のすべては、中央ではなく下に向かって移動しました。追加しています...
Android:layout_above="@id/bottomLayout"
...私の問題を修正しました。
これは私のために働いた。
<LinearLayout>
.
.
.
Android:gravity="center"
.
.>
<TextView
Android:layout_gravity = "center"
/>
<Button
Android:layout_gravity="center"
/>
</LinearLayout>
そのため、すべてのコンテンツ(TextViewとButton)を中央に配置するように線形レイアウトを設計し、TextViewとButtonは線形レイアウトの中心を基準にして配置されます。
@jksschneiderの展開はほぼ正しいです。 gravity
を親レイアウトに設定していないことを確認してから、layout_gravity="center"
をビューまたはレイアウトに設定します。
imageViewまたはレイアウト重力または重力が存在しない他のビューでは、子でAndroid:layout_centerInParent="true"
を使用します(子としてImageViewを使用した相対レイアウトがありました)。
問題は、root's(他の要素を保存するメインレイアウト)の重力が設定されていないことです。これをcenterに変更すると、他の要素の重力がうまく機能する必要があります。
以下は、Linearlayoutを下部に配置し、コンテンツを中央に配置するコードです。レイアウトを下部に設定するには、RelativeLayoutを使用する必要があります。
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:background="#97611F"
Android:gravity="center_horizontal"
Android:layout_alignParentBottom="true"
Android:orientation="horizontal">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="50dp"
Android:text="View Saved Searches"
Android:textSize="15dp"
Android:textColor="#fff"
Android:gravity="center_vertical"
Android:visibility="visible" />
<TextView
Android:layout_width="30dp"
Android:layout_height="24dp"
Android:text="12"
Android:textSize="12dp"
Android:textColor="#fff"
Android:gravity="center_horizontal"
Android:padding="1dp"
Android:visibility="visible" />
</LinearLayout>
</RelativeLayout>