Android: centra TextView orizzontalmente in LinearLayout


111

Ho il seguente layout di base

<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 sia corretto ma il testo è allineato a sinistra. Il textview occupa l'intera larghezza del genitore e il textview è impostato per essere centrato. Non sono sicuro di quale sia il problema ...


2
prova android: gravity = "center" per la visualizzazione del testo
user370305

Risposte:


227

Quello che sta succedendo è che poiché TextView sta riempiendo l' intera larghezza del LinearLayout interno, è già al centro orizzontale del layout . Quando lo usi android:layout_gravityposiziona il widget, nel suo insieme, nella gravità specificata. Invece di posizionare l'intero widget al centro, quello che stai veramente cercando di fare è posizionare il contenuto al centro che può essere realizzato android:gravity="center_horizontal"e l' android:layout_gravityattributo può essere rimosso.


3
Se ho capito bene, potrebbe cambiare "android: layout_width =" fill_parent "in" wrap_content "e quindi utilizzare android: layout_gravity =" center_horizontal ". Ho ragione?
Paul Brewczynski

1
@bluesm No, il LinearLayout interno non consente a se stesso di avere uno spazio non riempito con una vista (non considerando il caso di un LinearLayout vuoto). Quindi il android:layout_widthavrà lo stesso valore (dopo il layout). Poiché la larghezza del TextView è uguale al con del LinearLayout interno TextView ha efficacemente i android:layout_gravityvalori left, righte centerallo stesso tempo.
Dan S

1
Per ImageViewsuo layout_gravitye per TextViewsuo gravityè ciò che funziona. Android è fantastico! Grazie a tutti i bellissimi post SO senza i quali lo sviluppo era semplicemente impossibile.
Atul

1
non dimenticare 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

Se si imposta <TextView>al centro, <Linearlayout>prima mettere android:layout_width="fill_parent"obbligatorio
Non è necessario utilizzare nessun altro 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>


4

Usa semplicemente: android: layout_centerHorizontal = "true"

Metterà l'intera visualizzazione del testo al centro

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.