Android - Centrer TextView horizontalement dans LinearLayout

111

J'ai la disposition de base suivante

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

Il semble que le xml soit correct, mais le texte est aligné à gauche. La vue de texte occupe toute la largeur du parent et la vue de texte est définie pour être centrée. Je ne sais pas quel est le problème ...

Jake Wilson
la source
2
essayez android: gravity = "center" pour votre texte
user370305

Réponses:

227

Ce qui se passe, c'est que puisque le TextView remplit toute la largeur du LinearLayout interne, il est déjà au centre horizontal de la disposition . Lorsque vous l'utilisez, android:layout_gravityil place le widget, dans son ensemble, dans la gravité spécifiée. Au lieu de placer tout le centre du widget, ce que vous essayez vraiment de faire est de placer le contenu au centre, ce qui peut être accompli avec android:gravity="center_horizontal"et l' android:layout_gravityattribut peut être supprimé.

Dan S
la source
3
Si je comprends bien, il pourrait changer "android: layout_width =" fill_parent "en" wrap_content ", puis utiliser android: layout_gravity =" center_horizontal ". Ai-je raison?
Paul Brewczynski
1
@bluesm Non, le LinearLayout interne ne se permet pas d'avoir un espace qui n'est pas rempli avec une vue (sans considérer le cas d'un LinearLayout vide). Ainsi, le android:layout_widthaura la même valeur (après mise en page). Etant donné que la largeur de la TextView est égale à la LinearLayout avec de l'intérieur du TextView a effectivement les android:layout_gravityvaleurs de left, rightet centeren même temps.
Dan S
1
Pour ImageViewelle layout_gravityet pour TextViewelle, gravityc'est ce qui ne fonctionne que. Android est génial! Merci à tous les beaux articles SO sans lesquels le développement était tout simplement impossible.
Atul
1
n'oubliez pas 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
la source
24

Si vous placez <TextView>au centre, <Linearlayout>mettez d'abord android:layout_width="fill_parent"obligatoire
Pas besoin d'utiliser une autre 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>
patel135
la source
16

Utilisez android:gravity="center"au TextViewlieu de layout_gravity.

Ceinture noire
la source
Réponse courte et précise. Merci
nurnachman
4

Utilisez simplement: android: layout_centerHorizontal = "true"

Cela mettra toute la vue de texte au centre

charlenecipres
la source