Comment faire pour aligner les points de vue au bas de l'écran?
Voici ma mise en page de code;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<LinearLayout android:id="@+id/LinearLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom">
<EditText android:id="@+id/EditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<Button android:text="@string/label_submit_button"
android:id="@+id/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
</LinearLayout>
Ce que cela ressemble est sur la gauche et que je veux qu'elle ressemble est sur la droite.
La réponse la plus évidente est de mettre le TextView pour fill_parent sur la hauteur, mais cela ne cause pas de place à gauche pour le bouton ou champ de saisie.
Essentiellement le problème est que je veux que le bouton submit et la saisie de texte à une hauteur fixe à la partie inférieure et l'affichage de texte pour remplir le reste de l'espace. De même, dans le linéaire horizontal layout que je veux sur le bouton soumettre pour envelopper son contenu et pour la saisie de texte pour remplir le reste de l'espace.
Si le premier élément d'un linéaire de la mise en page est dit de fill_parent c'est exactement ce que fait, ne laissant pas de place pour d'autres articles. Comment puis-je obtenir un élément qui est le premier dans un linéaire de la mise en page à remplir tout l'espace en dehors de la configuration minimale requise par le reste des éléments dans la mise en page?
Relative mises en page ont été en effet la réponse:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
</TextView>
<RelativeLayout
android:id="@+id/InnerRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:text="@string/label_submit_button"
android:id="@+id/Button"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<EditText
android:id="@+id/EditText"
android:layout_width="fill_parent"
android:layout_toLeftOf="@id/Button"
android:layout_height="wrap_content">
</EditText>
</RelativeLayout>
</RelativeLayout>
- Peinture 😉 je suis à l'aide d'une peau sur l'émulateur si aimable autorisation de Thé Vui Huang teavuihuang.com/android
- +1 pour l'affichage de la mise en page XML que résolu. M'a aidé à comprendre ce qui n'allait pas avec le mien.
Vous devez vous connecter pour publier un commentaire.
Le moyen moderne de faire c'est avoir un ConstraintLayout et de contraindre le bas de la vue vers le bas de la ConstraintLayout avec
app:layout_constraintBottom_toBottomOf="parent"
L'exemple ci-dessous crée un FloatingActionButton qui sera aligné à la fin et le bas de l'écran.
Pour la référence, je vais garder mon ancienne réponse.
Avant l'introduction de ConstraintLayout la réponse a été un par rapport de mise en page.
Si vous avez un parent de mise en page qui remplit tout l'écran, vous devriez être en mesure d'utiliser
android:layout_alignParentBottom
pour déplacer le bouton vers le bas de l'écran.Si votre point de vue sur le fond ne sont pas affichés dans une relative mise en page, puis peut-être la mise en page ci-dessus, il prend tout l'espace. Dans ce cas, vous pouvez mettre la vue, qui doit être en bas, d'abord dans votre fichier de mise en page et la position du reste de la disposition ci-dessus les points de vue avec
android:layout_above
. Cette mesure de la vue d'en bas pour prendre tout l'espace dont il a besoin, et le reste de la mise en page peut remplir tout le reste de l'écran.android:layout_above
pour?that RelativeLayout
est la consommation de mémoire et doit être évitée dans la mesure du possible.Dans un
ScrollView
cela ne fonctionne pas, comme leRelativeLayout
serait alors se chevauchent ce qui est dans leScrollView
au bas de la page.Je fixe à l'aide d'une façon dynamique d'étirement
FrameLayout
:Vous pouvez garder votre linéaire initial de mise en page à la nidification de la relative mise en page dans le linéaire mise en page:
La réponse ci-dessus (Janusz) est tout à fait correct, mais j'ai personnellement ne se sentent pas à 100% à l'aise avec RelativeLayouts, donc je préfère introduire un "remplissage", vide TextView, comme ceci:
avant de l'élément qui doit être en bas de l'écran.
Vous pouvez le faire avec un LinearLayout ou un ScrollView, trop. Parfois, il est plus facile à mettre en œuvre que d'un RelativeLayout. La seule chose que vous devez faire est d'ajouter le point de vue suivant avant les Vues que vous souhaitez aligner sur le bas de l'écran:
Cela crée une vue vide, le remplissage de l'espace vide et en poussant la prochaine points de vue vers le bas de l'écran.
Cela fonctionne aussi.
1. Utilisation
ConstraintLayout
dans la racine de votre Mise en pageEt définir
app:layout_constraintBottom_toBottomOf="parent"
de laisser la Mise en page sur le bas de l'écran:2. Utilisation
FrameLayout
dans la racine de votre Mise en pageJuste mis
android:layout_gravity="bottom"
dans votre mise en page3. Utilisation
LinearLayout
dans la racine de votre Mise en page (android:orientation="vertical"
)(1) Définir une mise en page
android:layout_weight="1"
sur le dessus de la votre Disposition(2) la valeur de l'enfant
LinearLayout
pourandroid:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"
Le principal attribut est
ndroid:gravity="bottom"
, laissez l'enfant de la Vue sur le fond de la Disposition.4. Utilisation
RelativeLayout
dans la racine de Mise en pageEt définir
android:layout_alignParentBottom="true"
de laisser la Mise en page sur le bas de l'écranDe sortie
Suivi Timores la solution élégante, j'ai trouvé que le code suivant crée un vertical verticale LinearLayout et l'horizontale de remplir un horizontal LinearLayout:
Vous n'avez même pas besoin de nest la seconde
relative
mise en page à l'intérieur du premier. Utilisez simplement leandroid:layout_alignParentBottom="true"
dans le Bouton et EditText.Si vous ne souhaitez pas faire beaucoup de changements, alors vous pouvez simplement mettre:
pour le TextView ayant pour ID comme
@+id/TextView
je.eCréer à la fois des en-tête et pied de page, voici un exemple:
Mise en page XML
Capture d'écran
Utiliser le code ci-dessous. Aligner le bouton à fond. C'est le travail.
Pour un cas comme celui-ci, toujours utiliser RelativeLayouts. Un LinearLayout n'est pas prévu pour une telle utilisation.
Utilisation
android:layout_alignParentBottom="true"
dans votre<RelativeLayout>
.Ce sera certainement vous aider.
Dans le cas où vous disposez d'une hiérarchie comme ceci:
Tout d'abord, appliquez
android:fillViewport="true"
à laScrollView
et ensuite appliquerandroid:layout_alignParentBottom="true"
à laLinearLayout
.Cela a fonctionné parfaitement pour moi.
Vous pouvez simplement donner votre top enfant de la vue (le TextView @+id/TextView) un attribut:
android:layout_weight="1"
.Cela va forcer tous les autres éléments ci-dessous vers le bas.
Cela peut être fait avec un linéaire de la mise en page aussi.
Il suffit de fournir Hauteur = 0dp et poids = 1 pour la mise en page ci-dessus et celui que vous voulez dans le fond. Il suffit d'écrire hauteur = enrouler le contenu et pas de poids.
Il fournit envelopper de contenu pour la mise en page (celui qui contient votre modifier du texte et des boutons) et puis celui qui a le poids occupe le reste de la mise en page.
J'ai découvert cela par hasard.
J'ai utilisé la solution de Janusz posté, mais j'ai un rembourrage supplémentaire pour la dernière Vue depuis la partie supérieure de ma mise en page a été un ScrollView.
La ScrollView sera en partie caché comme il grandit avec le contenu. À l'aide de
android:paddingBottom
sur la dernière Vue permet d'afficher tout le contenu dans le ScrollView.