web-dev-qa-db-ja.com

親の中央にLinearLayoutを配置する方法は?

ここ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>
72
Violet Giraffe

これらの2つの属性は一般的に混同されます:

  • Android:gravityは、使用されるビューのコンテンツの重要度を設定します。
  • Android:layout_gravityは、ビューまたはレイアウトの重力を設定します親に対して

そのため、Android:gravity="center"を親に配置するか、Android:layout_gravity="center"をLinearLayout自体に配置します。

私は何度もそれらを混ぜて、なぜ物事が適切にセンタリングされなかったのか疑問に思いました...

209
jkschneider

あなたの線形レイアウトでこれを試してください

Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
15
Lakshmanan
<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"は、ビューの中心を水平に配置します。

10
Yashwanth Kumar

layout_gravity="center"または"center_horizontal"を親レイアウトに追加します。

ちなみに、LinearLayoutはすでに水平TableRowであるため、TableRow内のLinearLayoutは不要なようです。

5
Emmanuel Sys

これは私のために働いた..空のビューを追加..

<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>
3
gitesh devhane

これを試して:

<?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>
3
Hiral

<TableRow Android:gravity="center_horizontal">を試してください。これにより、内部のLinearLayoutがテーブル行内の中央に配置されます。

2
triggs

カスタム通知の設計中にも同じ状況に直面しました。次の属性をtrueに設定して試しました。

 Android:layout_centerInParent.
2
Karthikeyan Ve

ネストされたRelativeLayoutで作業しているときにこれを経験しました。私の解決策はシンプルになりましたが、知っておく価値のあるちょっとした落とし穴です。

私のレイアウトは...で定義されました.

Android:layout_height="fill_parent"
Android:layout_below="@id/someLayout
Android:gravity="center"

...しかし、この下のレイアウトがその上に配置されるとは思いませんでした。このレイアウト内のすべては、中央ではなく下に向かって移動しました。追加しています...

Android:layout_above="@id/bottomLayout"

...私の問題を修正しました。

1
Crash5998

これは私のために働いた。

<LinearLayout>
.
.
.
Android:gravity="center"
.
.>

<TextView
Android:layout_gravity = "center"
/>
<Button
Android:layout_gravity="center"
/>

</LinearLayout>

そのため、すべてのコンテンツ(TextViewとButton)を中央に配置するように線形レイアウトを設計し、TextViewとButtonは線形レイアウトの中心を基準にして配置されます。

1
Prabhu M

@jksschneiderの展開はほぼ正しいです。 gravityを親レイアウトに設定していないことを確認してから、layout_gravity="center"をビューまたはレイアウトに設定します。

1
Pawan

imageViewまたはレイアウト重力または重力が存在しない他のビューでは、子でAndroid:layout_centerInParent="true"を使用します(子としてImageViewを使用した相対レイアウトがありました)。

0
bastami82

問題は、root's(他の要素を保存するメインレイアウト)の重力が設定されていないことです。これをcenterに変更すると、他の要素の重力がうまく機能する必要があります。

0
Marin Karadzhov

以下は、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>
0
Kalpesh Patil