Android: centrar TextView horizontalmente en LinearLayout

111

Tengo el siguiente diseño básico

<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 correcto pero el texto está alineado a la izquierda. La vista de texto ocupa todo el ancho del padre y la vista de texto está configurada para estar centrada. No estoy seguro de cual es el problema...

Jake Wilson
fuente
2
pruebe android: gravity = "center" para su vista de texto
user370305

Respuestas:

227

Lo que está sucediendo es que, dado que TextView está llenando todo el ancho del LinearLayout interno, ya está en el centro horizontal del diseño . Cuando lo 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 está tratando de hacer es colocar el contenido en el centro, lo que se puede lograr android:gravity="center_horizontal"y android:layout_gravityeliminar el atributo.

Dan S
fuente
3
Si entiendo correctamente, podría cambiar "android: layout_width =" fill_parent "a" wrap_content "y luego usar android: layout_gravity =" center_horizontal ". ¿Estoy en lo cierto?
Paul Brewczynski
1
@bluesm No, el LinearLayout interno no se permite tener espacio que no esté lleno con una Vista (sin considerar el caso de un LinearLayout vacío). Por lo tanto, el android:layout_widthtendrá el mismo valor (después del diseño). Dado que la anchura de la TextView es igual a la de de la LinearLayout interior la TextView tiene efectivamente los android:layout_gravityvalores de left, righty centeral mismo tiempo.
Dan S
1
Por ImageViewsu layout_gravityy por TextViewsu gravityes lo que solo funciona. ¡Android es genial! Gracias a todas las hermosas publicaciones de SO sin las cuales el desarrollo era simplemente imposible.
Atul
1
no te olvides de android:layout_width="match_parent"
Choletski
24
<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>

JoeLallouz
fuente
24

Si lo coloca <TextView>en el centro <Linearlayout>, primero ponga android:layout_width="fill_parent"obligatorio
No es necesario usar ninguna otra 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>
patel135
fuente
16

Utilizar android:gravity="center"en en TextViewlugar de layout_gravity.

Cinta negra
fuente
Respuesta corta y precisa. Gracias
nurnachman
4

Simplemente use: android: layout_centerHorizontal = "true"

Pondrá toda la vista de texto en el centro

charlenecipres
fuente