Comment aligner les vues en bas de l’écran?

Voici mon code de mise en page;

          

Ce à quoi cela ressemble, c’est à gauche et ce que je veux que ce soit, c’est à droite.

Mise en forme Android - Réelle (à gauche) et souhaitée (à droite)

La réponse évidente consiste à définir TextView sur fill_parent en hauteur, mais cela ne laisse aucune place au bouton ou au champ de saisie. Essentiellement, le problème est que le bouton d’envoi et la saisie de texte doivent avoir une hauteur fixe en bas et la vue en texte remplir le rest de l’espace, de la même manière que dans la disposition linéaire horizontale. pour l’entrée de texte pour remplir le rest de l’espace.

Si le premier élément d’une disposition linéaire est dit à fill_parent, il le fait exactement, ne laissant aucune place aux autres éléments, comment obtenir un élément qui est le premier dans une disposition linéaire pour remplir tout l’espace à part le minimum requirejs par le rest les éléments dans la mise en page?

MODIFIER:

Les mises en page relatives étaient en effet la réponse – Merci!

            

Je pense que vous devriez essayer une mise en page relative .
Si vous avez une disposition relative qui remplit tout l’écran, vous devriez pouvoir utiliser android:layout_alignParentBottom pour déplacer le bouton au bas de l’écran.

Si vos vues en bas ne sont pas affichées dans une mise en page relative, alors la mise en page ci-dessus prend tout l’espace. Dans ce cas, vous pouvez placer la vue qui devrait être en bas, d’abord dans votre fichier de mise en page et positionner le rest de la mise en page au-dessus des vues avec android:layout_above . Cela permet à la vue du bas de prendre autant d’espace que nécessaire et le rest de la mise en page peut remplir tout le rest de l’écran.

Dans un ScrollView cela ne fonctionne pas, car RelativeLayout chevaucherait alors tout ce qui se trouve dans ScrollView au bas de la page.

Je l’ai corrigé en utilisant un FrameLayout qui s’étire dynamicment:

             

Vous pouvez conserver votre disposition linéaire initiale en imbriquant la disposition relative dans la disposition linéaire:

          

La réponse ci-dessus (par Janusz) est tout à fait correcte, mais personnellement, je ne me sens pas à 100% avec RelativeLayouts, alors je préfère introduire un «TextView» vide, comme ceci:

   

avant l’élément qui devrait être au bas de l’écran.

Vous pouvez aussi le faire avec un LinearLayout ou un ScrollView. Parfois, il est plus facile de mettre en œuvre un RelativeLayout. La seule chose que vous devez faire est d’append la vue suivante avant les vues que vous souhaitez aligner au bas de l’écran:

  

Cela crée une vue vide, remplissant l’espace vide et poussant les vues suivantes au bas de l’écran.

Cela fonctionne aussi.

     

gravity =

Suite à la solution élégante de Timores, j’ai trouvé que ce qui suit crée un remplissage vertical dans un LinearLayout vertical et un remplissage horizontal dans un LinearLayout horizontal:

  

Vous n’avez même pas besoin d’imbriquer la deuxième disposition relative dans le premier. Utilisez simplement l’ android:layout_alignParentBottom="true" dans le bouton et EditText .

Si vous ne souhaitez pas apporter beaucoup de changements, vous pouvez simplement mettre:

 android:layout_weight="1" 

pour le TextView ayant l’ID @+id/TextView c.-à-d.

   

1.Utilisez ConstraintLayout dans votre disposition racine

Et définir app:layout_constraintBottom_toBottomOf="parent" pour laisser la mise en page en bas de l’écran

   

2.Utilisez FrameLayout dans votre FrameLayout racine

Il suffit de définir android:layout_gravity="bottom" dans votre mise en page

   

3.Utilisez LinearLayout dans votre disposition racine ( android:orientation="vertical" )

(1) Définir un layout android:layout_weight="1" en haut de votre Layout

  

(2) Réglez l’enfant LinearLayout pour android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"

L’atsortingbut principal est ndroid:gravity="bottom" , laissez l’enfant voir en bas de Layout.

   

4.Utilisez RelativeLayout dans la structure racine

Et définir android:layout_alignParentBottom="true" pour laisser la mise en page en bas de l’écran

   

SORTIE

entrer la description de l'image ici

Créer à la fois HEADER et FOOTER, voici un exemple

[Mise en page XML]

       

[ Capture d’écran ]

entrer la description de l'image ici

J’espère que c’est utile. Merci!!

utiliser le bouton d’alignement de code ci-dessous pour mettre en marche son fonctionnement

           

Utilisez android:layout_alignParentBottom="true" dans votre .

Cela aidera certainement.

Si vous avez une hiérarchie comme celle-ci:

  |--  |--  

Tout d’abord, appliquez android:fillViewport="true" au ScrollView , puis appliquez android:layout_alignParentBottom="true" au LinearLayout .

Cela a fonctionné pour moi parfaitement.

       

Pour un cas comme celui-ci, utilisez toujours les RelativeLayouts. Un LinearLayout n’est pas conçu pour une telle utilisation.

           

Vous pouvez simplement atsortingbuer à votre vue d’enfant supérieure (TextView @ + id / TextView ) un atsortingbut: android:layout_weight="1" .

Cela forcera tous les autres éléments en dessous.

J’ai utilisé la solution affichée par Janusz, mais j’ai ajouté un remplissage à la dernière vue, car la partie supérieure de ma mise en page était une vue ScrollView. Le ScrollView sera en partie caché au fur et à mesure de sa croissance avec le contenu. Utiliser Android: paddingBottom sur la dernière vue permet d’afficher tout le contenu de ScrollView.

Cela peut être fait avec une disposition linéaire. Fournissez simplement Height = 0dp et weight = 1 à la disposition ci-dessus et celle que vous voulez en bas écrivez simplement height = wrap content et aucun poids. Ce qu’il fait, c’est qu’il fournit un contenu d’emballage pour la mise en page (celle qui contient le texte et le bouton d’édition), puis celui qui a du poids occupe le rest de la mise en page. Je l’ai découvert par accident.