LinearLayout: layout_gravity = “bottom” ne fonctionne pas sur LinearLayout horizontal

Ok, tout d’abord, j’ai cherché sur internet, mais personne n’a le même problème. Donc, tout ce que je veux, c’est avoir 3 textViews, alignées en bas avec l’écran et avec la même largeur. Voici une image représentant ce que je veux:

entrer la description de l'image ici

Et voici mon code:

       

Eh bien, cela fonctionne quand les 3 textViews ont la même hauteur, mais quand leur taille diffère, j’obtiens le résultat suivant:

problème

Un autre comportement étrange, c’est que lorsque je mets la “layout_gravity” du plus gros texte à “centre-vertical”, j’obtiens le résultat suivant:

première solution de contournement

Alors évidemment, je suis devenu fou et j’ai essayé une autre combinaison avec le centre-vertical, mais rien ne fonctionnait comme je le souhaitais au départ:

solution de désespoir

Donc, des conseils sur la façon de résoudre ce problème?

La bonne réponse

Toutes les autres réponses sont fausses. Les points importants:

  1. Vous n’avez pas besoin de RelativeLayout . Vous pouvez le faire avec juste un LinearLayout .
  2. (Pas critique mais je suppose que vous ne saviez pas) Vos poids ne doivent pas nécessairement être égaux à 1, vous pouvez simplement les définir à une valeur égale (par exemple 1).
  3. La chose critique est que vous avez besoin d’ android:baselineAligned="false" . En fait, j’ai seulement trouvé cela en regardant à travers la source LinearLayout . C’est dans les docs mais ils ne mentionnent pas qu’il est activé par défaut!

En tout cas, voici le code:

       

Et comment ça a l’air:

Bonne disposition linéaire

D’accord. J’ai donc eu le même problème, mais avec des boutons à bascule au lieu de vues de texte. Pour une raison quelconque, si l’un des éléments de LinearLayout (Horizontal) a une hauteur différente de celle des autres vues de la disposition et est définie pour avoir la même gravité que les autres, la gravité est effectivement “ignorée”.

J’ai réussi à obtenir le comportement souhaité en encapsulant chaque vue dans un RelativeLayout et en définissant Android: gravity sur la disposition relative au lieu d’android: layout_gravity sur chaque bouton. J’ai également déplacé l’androïde: layout_weight du bouton vers la disposition relative.

Donc, au lieu d’avoir:

      

Ce qui donne le même problème que signalé, j’ai plutôt fait:

         

**MODIFIER:

Si cela ne fait pas tout, ajoutez le drapeau aligné comme indiqué dans l’une des réponses ci-dessous par Timmmmm. C’est une meilleure façon.

Utilisez ceci

MISE EN PAGE MODIFIÉE : Ok, je l’ai édité et ajouté des couleurs et de la gravité pour laisser les vues de texte en bas ont la même hauteur et la même largeur, ainsi que le texte en bas et au centre de chaque vue.

       

Il devrait faire exactement ce que vous avez demandé.

Il utilise un LinearLayout dans un RelativeLayout, mais il est parfois nécessaire de les imbriquer pour obtenir ce que nous voulons. Ajoutez d’autres vues que vous pourriez souhaiter dans la mise en page relative et vous aurez toujours vos textes en bas tant que le dernier enfant de votre RelativeLayout est ce LinearLayout comme indiqué ci-dessus.

Identique à la réponse de Timmm, mais vous pouvez également utiliser android:gravity="bottom" pour l’atsortingbut LinearLayout au lieu d’ android:layout_gravity="bottom" pour chaque TextView .

Comme ça:

       

Si vous êtes d’accord avec un RelativeLayout au lieu de Linear, cela fera l’affaire, je suppose:

       

Si vous essayez de faire en sorte que les trois vues enfants aient la même hauteur, puis changez de hauteur à “0”, définissez android: weightSum du LinearLayout sur 3 et définissez le Android: layout_weight de chaque vue sur 1.