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


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.


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>


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>


4

Simplemente use: android: layout_centerHorizontal = "true"

Pondrá toda la vista de texto en el centro

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.