92

我有以下的基本佈局的Android - TextView的中心中水平的LinearLayout

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/title_bar_background"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:padding="10dp" 
     android:text="HELLO WORLD" /> 

    </LinearLayout> 
<LinearLayout> 

這似乎是XML是正確的,但文本左對齊。 textview佔據了父級的整個寬度,textview被設置爲居中。不知道什麼問題是...

+2

嘗試的android:比重=「中心」爲您的TextView – user370305

回答

194

發生了什麼事是,由於TextView是被填充整個寬度內的LinearLayout它已經在佈局的水平中心。當您使用android:layout_gravity時,它會將該小部件作爲一個整體放入指定的重力中。您可以將的內容置於中心位置,而不是將整個小部件中心放在您的中心位置,這可以使用android:gravity="center_horizontal"完成,並且可以刪除android:layout_gravity屬性。

+2

如果我理解正確,他可以將「android:layout_width =」fill_parent「改爲」wrap_content「,然後使用android:layout_gravity =」center_horizo​​ntal「。對嗎? –

+1

@bluesm不,內部LinearLayout不允許自己(沒有考慮空的LinearLayout的情況),因此'android:layout_width'將具有相同的值(佈局之後)。由於TextView的寬度等於內部LinearLayout的TextView有效地同時具有'left','right'和'center'的'android:layout_gravity'值 –

+1

對於'ImageView'其''layout_gravity'和'TextView'它的'gravity ''是什麼** only ** works.Android是偉大的!感謝所有美麗的SO帖子,沒有它發展是不可能的。 – Atul

15

使用android:gravity="center"TextView而不是layout_gravity

+0

短期和準確的答案。謝謝 – nurxyz

20
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<LinearLayout 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/title_bar_background"> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:padding="10dp" 
    android:text="HELLO WORLD" /> 

</LinearLayout> 

19

如果在中心<Linearlayout>設置<TextView>然後第一次把android:layout_width="fill_parent"強制
無需使用任何其他重力

<LinearLayout 
      android:layout_toRightOf="@+id/linear_profile" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:orientation="vertical" 
      android:gravity="center_horizontal"> 
      <TextView 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:text="It's.hhhhhhhh...." 
       android:textColor="@color/Black" 

       /> 
    </LinearLayout>