92

que tiene la siguiente estructura básicaAndroid - Centro TextView horizontalmente en 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> 

Parece que el XML es correcta, pero el texto está alineado a la izquierda. La vista de texto ocupa todo el ancho del elemento principal y la vista de texto está configurada para centrarse. No estoy seguro de cuál es el problema ...

+2

androide intento: la gravedad = "centro" para su TextView – user370305

Respuesta

194

Lo que pasa es que desde la del TextView está llenando el toda la anchura de la LinearLayout interior ya se encuentra en el centro horizontal del diseño . Cuando usa android:layout_gravity coloca el widget, como un todo, en la gravedad especificada. En lugar de colocar todo el centro de widgets, lo que realmente intenta hacer es colocar el contenido en el centro, lo que se puede lograr con android:gravity="center_horizontal" y el atributo android:layout_gravity se puede eliminar.

+2

Si entiendo correctamente, podría cambiar "android: layout_width =" fill_parent "por" wrap_content "y luego usar android: layout_gravity =" center_horizontal ". ¿Estoy en lo cierto? –

+1

@bluesm No, el LinearLayout interno no se permite tener espacio que no esté lleno de una Vista (sin considerar el caso de un LinearLayout vacío). Por lo tanto, el 'android: layout_width' tendrá el mismo valor (después del diseño). Dado que el ancho del TextView es igual a del LinearLayout interno el TextView efectivamente tiene los valores 'android: layout_gravity' de' left', 'right', y' center' al mismo tiempo. –

+1

Para 'ImageView' its' layout_gravity'and '' TextView' its 'gravity 'es lo que ** solo ** funciona. ¡Android es genial! Gracias a todas las hermosas publicaciones de SO sin las cuales el desarrollo era simplemente imposible. – Atul

15

Use android:gravity="center" en TextView en lugar de layout_gravity.

+0

Respuesta corta y precisa. Gracias – 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

Si establece <TextView> en el centro de <Linearlayout> continuación, poner primero android:layout_width="fill_parent" obligatoria
No hay necesidad de utilizar ningún otro gravedad

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