92

Ho il seguente layout di baseAndroid - Centro TextView orizzontalmente in 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> 

Sembra che l'XML è corretto, ma il testo è allineato a sinistra. La vista testo occupa l'intera larghezza del genitore e la vista testo è impostata per essere centrata. Non sei sicuro di quale sia il problema ...

+2

provare Android: la gravità = "center" per il vostro TextView – user370305

risposta

194

Cosa accade è che, poiché il TextView sta riempiendo tutta larghezza della LinearLayout interna è già al centro orizzontale della la layout. Quando si utilizza android:layout_gravity, colloca il widget, nel suo complesso, nella gravità specificata. Invece di posizionare l'intero centro del widget, ciò che si sta tentando di fare è posizionare il contenuto nel centro che può essere eseguito con android:gravity="center_horizontal" e l'attributo android:layout_gravity può essere rimosso.

+2

Se ho capito bene, potrebbe cambiare "android: layout_width =" fill_parent "a" wrap_content "e quindi usare android: layout_gravity =" center_horizontal ". Ho ragione? –

+1

@bluesm No, LinearLayout interno non si autorizza per avere uno spazio che non è riempito con una vista (non considerando il caso di un LinearLayout vuoto), quindi 'android: layout_width' avrà lo stesso valore (dopo il layout) .Data che la larghezza del TextView è uguale alla del LinearLayout interno il TextView ha effettivamente i valori 'android: layout_gravity' di' left', 'right' e' center' allo stesso tempo. –

+1

Per 'ImageView' il suo' layout_gravity' e per 'TextView' il suo' gravità 'è ciò che ** solo ** funziona. Android è fantastico! Grazie a tutti i bei post SO senza i quali lo sviluppo era semplicemente impossibile. – Atul

15

Utilizzare android:gravity="center" in TextView anziché layout_gravity.

+0

Risposta breve e preciso. Grazie, – 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

Se si imposta <TextView> nel centro in <Linearlayout> poi la prima messa android:layout_width="fill_parent" obbligatoria
Non c'è bisogno di utilizzare qualsiasi altra gravità

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