92

J'ai la mise en page de base suivanteAndroid - Centre TextView Horizontalement à LinearLayout

<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 est 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. Vous ne savez pas quel est le problème ...

+2

essayer android: gravité = « center » pour votre textview – user370305

Répondre

194

Ce qui se passe est que depuis le TextView du remplissage, la toute largeur de la LinearLayout intérieure, il est déjà dans le centre horizontal de la mise en page . Lorsque vous utilisez android:layout_gravity, il place le widget, dans son ensemble, dans la gravité spécifiée. Plutôt que de placer tout le centre du widget, vous essayez de placer le contenu au centre, ce qui peut être accompli avec android:gravity="center_horizontal" et l'attribut android:layout_gravity peut être supprimé.

+2

Si je comprends bien, il pourrait changer "android: layout_width =" fill_parent "en" wrap_content "et ensuite utiliser android: layout_gravity =" center_horizontal "Ai-je raison? –

+1

@bluesm Non, le LinearLayout interne ne se permet pas pour avoir de l'espace qui n'est pas rempli avec une vue (sans considérer le cas d'un LinearLayout vide) Ainsi, le 'android: layout_width' aura la même valeur (après la mise en page.) Puisque la largeur du TextView est égale à la du LinearLayout interne, le TextView possède effectivement les valeurs 'android: layout_gravity' de' left', 'right', et' center' en même temps –

+1

Pour 'ImageView' son' layout_gravity' et 'TextView' sa' gravité 'est ce que ** fonctionne seulement ** Android est génial! Merci à tous les beaux messages SO sans lequel le développement était tout simplement impossible – Atul

15

Utilisez android:gravity="center" dans TextView au lieu de layout_gravity.

+0

réponse courte et précise. Merci – nurxyz

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

19

Si vous définissez <TextView> dans le centre de <Linearlayout> puis d'abord mettre android:layout_width="fill_parent" obligatoire
Pas besoin d'utiliser toute 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> 
Questions connexes