web-dev-qa-db-fra.com

layout_gravity ne fonctionne pas dans une disposition linéaire horizontale

J'ai essayé d'utiliser layout_gravity dans une horizontale linear layout. Mais cela ne semble pas fonctionner. Je ne pas je veux utiliser un relative layout ou toute autre disposition. Je veux savoir pourquoi cela ne fonctionne pas avec linear layout. J'ai déjà utilisé layout_gravity dans vertical dispositions linéaires et cela a fonctionné comme je m'y attendais.

<LinearLayout
    Android:id="@+id/shata"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal"
    >
    <TextView
        Android:id="@+id/title_textview"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:textColor="@color/black"
        Android:text="shata1"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        />
    <TextView
        Android:id="@+id/map_imageview"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:layout_gravity="right"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:text="shata2"/>    
</LinearLayout>

Comme vous pouvez le voir, la disposition linéaire a un orientation=horizontal et width=match_parent (il est juste à l'intérieur de la disposition racine). Mais les deux TextViews sont affichés collés à gauche du LinearLayoutmême si j'ai donné leur layout_gravity=center et layout_gravity=right respectivement.

20
Ashwin

Réponse courte: si vous avez un LinearLayout horizontal, chaque enfant ne peut avoir que layout_gravity valeurs de top, bottom et center.

La raison en est que vous avez déjà dit au LinearLayout d'aligner chaque enfant horizontalement, de gauche à droite dans l'ordre que vous spécifiez, ce qui signifie qu'il vous permet uniquement de spécifier l'alignement vertical de chaque enfant dans les layout_gravity, et l'inverse s'applique lorsque votre LinearLayout est vertical.

Il existe un bon lien expliquant le fonctionnement des différentes gravités ici .

45
Matt Taylor

En plus de réponse de Matt Taylor , vous pouvez spécifier le rapport de taille des éléments à l'intérieur de la mise en page en utilisant le layout_weight propriété. Voir ceci thread pour plus de détails.

Le code ci-dessus divisera l'espace horizontal en trois zones égales.

<LinearLayout
    Android:id="@+id/shata"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">
    <TextView
        Android:layout_width="0"
        Android:layout_height="match_parent"
        Android:layout_weight="1"/>
    <TextView
        Android:layout_width="0"
        Android:layout_height="match_parent"
        Android:layout_weight="1"/>
    <TextView
        Android:layout_width="0"
        Android:layout_height="match_parent"
        Android:layout_weight="1"/>    
</LinearLayout>

Donc, dans cet exemple

  • le premier élément ressemble à layout_gravity="left"
  • le deuxième élément ressemble à layout_gravity="center"
  • le troisième élément ressemble à layout_gravity="right"
6
ThomasThiebaud

Si vous souhaitez que votre vue enfant soit centrée, il vous suffit de donner la gravité de votre disposition linéaire aux enfants. Sur votre disposition linéaire, définissez les éléments suivants:

Android:gravity="center"

J'espère avoir bien répondu à votre question.

2
Thomas R.

vous pouvez diviser la disposition en 3 parties, puis dans la partie droite, mettre "shata2" dans la partie centrale, mettre "shata1" et la partie gauche, mettre une vue transparente.

<LinearLayout
    Android:id="@+id/shata"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal">

    <View
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        />

    <TextView
        Android:id="@+id/title_textview"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center|top"
        Android:layout_weight="1"
        Android:text="shata1"
        Android:gravity="center"
        Android:textAppearance="?android:attr/textAppearanceMedium"
        Android:textColor="#111" />

    <TextView
        Android:id="@+id/map_imageview"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:layout_gravity="right"
        Android:gravity="right"
        Android:text="shata2"
        Android:textAppearance="?android:attr/textAppearanceMedium" />



</LinearLayout>

mais dans votre code, lorsque vous utilisez une mise en page linéaire, il suffit de mettre les vues les unes après les autres et cela ne tient pas compte de la gravité de la mise en page. j'espère que ce sera utile.

1
saleh sereshki

Une façon de créer trois enfants en disposition linéaire horizontale serait (testée):

    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="horizontal"
        Android:weightSum="3"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <TextView
            Android:layout_width="0dp"
            Android:layout_height="wrap_content"
            Android:layout_weight="1" />

        <TextView
            Android:layout_width="0dp"
            Android:layout_weight="1"
            Android:layout_gravity="center_horizontal"
            Android:layout_height="wrap_content"/>

            <TextView
                Android:layout_weight="1"
                Android:layout_width="0dp"
                Android:layout_height="wrap_content"
                Android:text="" />
0
truespan
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="horizontal">
<TextView
    style="@style/Base.TextAppearance.AppCompat.Headline"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="Blankets &amp;  Carpets" />

<ListView
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:id="@+id/list_home_feature"
    Android:layout_marginLeft="10dp"
    Android:layout_marginTop="30dp"
    Android:layout_marginRight="10dp">

</ListView>

</LinearLayout>
0
Android