Android - Centralize TextView horizontalmente em LinearLayout

111

Eu tenho o seguinte layout 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 o xml está correto, mas o texto está alinhado à esquerda. A visualização do texto ocupa toda a largura do pai e a visualização do texto é configurada para ser centralizada. Não tenho certeza de qual é o problema ...

Jake Wilson
fonte
2
experimente android: gravity = "center" para sua visualização de texto
user370305

Respostas:

227

O que está acontecendo é que, como o TextView está preenchendo toda a largura do LinearLayout interno, ele já está no centro horizontal do layout . Ao usá- android:layout_gravitylo, coloca o widget, como um todo, na gravidade especificada. Em vez de colocar todo o centro do widget, o que você realmente está tentando fazer é colocar o conteúdo no centro, o que pode ser feito android:gravity="center_horizontal"e o android:layout_gravityatributo pode ser removido.

Dan S
fonte
3
Se bem entendi, ele poderia alterar "android: layout_width =" fill_parent "para" wrap_content "e usar android: layout_gravity =" center_horizontal ". Estou certo?
Paul Brewczynski
1
@bluesm Não, o LinearLayout interno não se permite ter espaço que não seja preenchido com uma View (não considerando o caso de um LinearLayout vazio). Assim, o android:layout_widthterá o mesmo valor (após layout). Uma vez que a largura da TextView é igual à com a do interior da LinearLayout TextView eficazmente tem os android:layout_gravityvalores de left, righte centerao mesmo tempo.
Dan S
1
Para ImageViewsua layout_gravitye de TextViewseus gravityé o que única trabalha. O Android é ótimo! Obrigado a todos os lindos posts do SO sem os quais o desenvolvimento era simplesmente impossível.
Atul
1
não se esqueça 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
fonte
24

Se você definir <TextView>no centro <Linearlayout>, primeiro coloque android:layout_width="fill_parent"obrigatório.
Não há necessidade de usar qualquer outra gravidade

    <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
fonte
16

Use android:gravity="center"em em TextViewvez de layout_gravity.

Cinto preto
fonte
Resposta curta e precisa. Obrigado
nurnachman
4

Basta usar: android: layout_centerHorizontal = "true"

Irá colocar todo o textview no centro

charlenecipres
fonte