LinearLayoutをその親の中心に揃える方法は?


80

私はここSOで多くの同様の質問を調べましたが、何も役に立ちません。ネストされたさまざまなレイアウトの階層があり、すべてにがありandroid:layout_width="fill_parent"、最も内側のレイアウトにはandroid:layout_width="wrap_content-中央に(水平に)配置する必要があります。それ、どうやったら出来るの?

更新::問題の原因を見つけました-内側のLinearLayoutをRelativeLayoutに入れandroid:layout_width="fill_parent"ても、コンテンツはラップされます。ただし、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>

回答:


230

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

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

したがってandroid:gravity="center"、親またはandroid:layout_gravity="center"LinearLayout自体に配置します。

私は何度もそれらを混ぜ合わせて、物事が適切に中央に配置されていないのはなぜだろうと思っています...


1
android:layout_gravity="center"TextViewsを含むレイアウトを試しましたが、役に立ちません。まだ左揃えになっています。また、このレイアウトの幅をwrapとに設定しようとしましたfill-違いはありません。
バイオレットキリン

1
EclipseでPixelPerfectツールを使用してみましたか?アプリのライブバージョンのレイアウトの境界線が表示されるため、通常、どこが間違っているのかを把握できます。
jkschneider 2011年

要素と親のキーワード「重力」の使用の紛らわしい違いを説明するための+1。
scatmoi 2013

+ 1cozそれは私の問題を解決します。私の例=>線形レイアウトとその中にテキストビューがあります。texviewで動作します。twを水平方向に中央揃えにします。
alicanbatur 2013

LinearLayoutのためlayout_gravityいいえ
Sayka


10
<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>

LinearLayoutでrelativeLayoutをラップすることを検討してください。android:layout_centerHorizontal="true"ビューの中心を水平に配置します。


すでにそれを試しました。動作しません!そこで何が起こっているのかわかりません... XMLの完全なコードを投稿しましたが、他のいくつかのテーブル行をトリミングしただけです。レイアウトの何が問題になっていますか?
バイオレットキリン

それは私が思うテーブルの行と関係があります、彼らは子供たちを左側に追加します。テーブルの行タグにlayout_width = "fill_parent"を指定することを検討してください。
Yashwanth Kumar

この回答のXML設定のために、まだ持っている場合の問題が再びチェックLinearLayoutlayout_widthあるべきwrap_contentとしませんmatch_parent。同じロジックが垂直方向の整列にも適用されます
ケロッグ2016年

5

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

サイドノートでは、あなたのLinearLayout中にあなたがTableRow通り、不必要と思われるTableRowすでに水平ですLinearLayout


親を埋めるためにテーブルが必要であり、中央に配置されるのは数行だけなので、これは必要です。そして、layout_gravityは役に立ちません。
バイオレットキリン

3

これを試して:

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

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

<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>

2

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


2

カスタム通知を設計しているときに同じ状況に直面しました。次の属性をtrueに設定してみました。

 android:layout_centerInParent.

2

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

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

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

</LinearLayout>

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


1

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


1

ネストされたRelativeLayoutsを操作しているときに、これを経験しました。私の解決策は単純なものになりましたが、知っておく価値のあるちょっとした落とし穴です。

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

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

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

android:layout_above="@id/bottomLayout"

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


0

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


0

問題は、ルート(他の要素を格納するメインレイアウト)の重力が設定されていないことです。他の要素の重力を中心に変更すると、問題なく機能するはずです。


0

以下は、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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.