118 votes

Android - Centrer horizontalement un TextView dans un LinearLayout

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 que le texte soit aligné sur la gauche. L'aperçu de texte occupe toute la largeur du parent et l'aperçu de texte est réglé pour être centré. Je ne sais pas quel est le problème...

3 votes

Essayez Android:gravity="center" pour votre fenêtre de texte.

238voto

Dan S Points 5376

Ce qui se passe, c'est qu'étant donné que le TextView remplit le champ ensemble du site de la LinearLayout intérieure, elle se trouve déjà au centre horizontal de l'écran. mise en page . Lorsque vous utilisez android:layout_gravity il place le widget, dans son ensemble, dans la gravité spécifiée. Au lieu de placer l'ensemble du widget au centre, ce que vous essayez vraiment de faire est de placer l'élément contenu au centre, ce qui peut être accompli avec android:gravity="center_horizontal" y el android:layout_gravity peut être supprimé.

3 votes

Si je comprends bien, il pourrait changer "Android:layout_width="fill_parent" en "wrap_content" et ensuite utiliser Android:layout_gravity="center_horizontal". Est-ce que j'ai bien compris ?

1 votes

@bluesm Non, le LinearLayout interne ne se permet pas d'avoir un espace qui n'est pas rempli par une vue (sans considérer le cas d'un LinearLayout vide). Ainsi, la android:layout_width auront la même valeur (après mise en page). Étant donné que la largeur du TextView est égale à celle du LinearLayout interne, le TextView a effectivement la valeur suivante android:layout_gravity valeurs de left , right y center en même temps.

1 votes

Pour ImageView son layout_gravity et pour TextView son gravity est ce que uniquement fonctionne. Android est génial ! Merci à tous les beaux postes de SO sans lesquels le développement était tout simplement impossible.

26voto

135 Points 49

Si vous définissez <TextView> au centre au centre <Linearlayout> puis d'abord mettre 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>

24voto

JoeLallouz Points 499
<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>

17voto

blackbelt Points 45840

Utilice android:gravity="center" en TextView au lieu de layout_gravity .

0 votes

Réponse courte et précise. Je vous remercie.

3voto

charlenecipres Points 41

Il suffit d'utiliser : Android:layout_centerHorizontal="true" (en anglais)

Cela mettra l'ensemble du texte au centre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X