RelativeLayout prend plein écran pour wrap_content

Pourquoi FOOBARZ est-il mis en place tout en bas quand aucun élément n’est layout_height="fill_parent" en d’autres termes, tous les éléments sont wrap_content pour la hauteur? entrer la description de l'image ici

                 

Depuis le doc RelativeLayout :

Aperçu de la classe

Une mise en page où les positions des enfants peuvent être décrites les unes par rapport aux autres ou par rapport au parent.

Notez que vous ne pouvez pas avoir une dépendance circulaire entre la taille du RelativeLayout et la position de ses enfants. Par exemple, vous ne pouvez pas avoir un RelativeLayout dont la hauteur est définie sur WRAP_CONTENT et un enfant défini sur ALIGN_PARENT_BOTTOM.

Documentation de classe

Ce qui est exactement votre cas. RelativeLayout ne peut pas faire cela.

Pour ceux qui recherchent une solution, comme je l’ai fait, vous pouvez utiliser FrameLayout au lieu de RelativeLayout .

Ensuite, vous pouvez définir la gravité de l’object prévu en bas à droite comme ci-dessous

   

Vous avez défini RelativeLayout sur "wrap_content" et TextView sur android:layout_alignParentBottom="true" , il essaie donc automatiquement d’étirer le RelativeLayout vers le bas. N’utilisez pas de telles dépendances avec la mise en page relative, car cela peut compter comme “dépendances circulaires”.

Depuis la documentation de RelativeLayout :

Notez que vous ne pouvez pas avoir une dépendance circulaire entre la taille du RelativeLayout et la position de ses enfants. Par exemple, vous ne pouvez pas avoir un RelativeLayout dont la hauteur est définie sur WRAP_CONTENT et un enfant défini sur ALIGN_PARENT_BOTTOM .

Essayez d’aligner votre TextView sur autre chose que le parent RelativeLayout, mais faites également attention à ce problème:
Les dépendances circulaires, besoin d’aide avec le code exact

Sinon, essayez d’append des dispositions internes plus sophistiquées.

Bonnes réponses Maintenant, si vous n’avez pas layout_alignParentBottom="true" et que vous obtenez toujours ce problème, faites attention à android:background="@drawable/bkgnd" où bkgnd est un biggie.

Je ne suis pas sûr pourquoi la manière propre et évidente de réaliser ceci n’a pas encore été publiée. Cette solution performante fonctionne pour n’importe quel View MyView avec une hauteur connue.

Enveloppez votre RelativeLayout avec la taille wrap_content dans un FrameLayout:

      

Notez simplement que la vue au bas de FrameLayout sera au-dessus de votre contenu RelativeLayout . Vous devrez donc append un remplissage au bas de cette présentation pour l’adapter. Si vous souhaitez que cette vue ait une hauteur variable, vous pouvez soit sous-classe FrameLayout pour append un remplissage dans le code en fonction de la hauteur de la vue mesurée, ou simplement remplacer FrameLayout par LinearLayout vertical si vous n’êtes pas préoccupé par les performances. item, ou les vues sont relativement légères.

N’utilisez pas les propriétés de type alight_Parent avec les vues enfant

Vous pouvez utiliser la disposition des frameworks au lieu de RelativeLayout avec la gravité respective