J'ai une TextView
que je veux épingler au bas d'une activité de paysage qui utilise LinearLayout
avec des éléments disposés verticalement.
J'ai mis Android:gravity="bottom"
dans la vue texte, mais il aime toujours être juste en dessous du dernier élément de la LinearLayout
exactement ce que je ne veux pas que ce soit fait.
Aucune suggestion?
Mise à jour: Je reçois toujours des votes sur cette question, qui est toujours la réponse acceptée et à laquelle je pense avoir mal répondu. Afin de s'assurer que les meilleures informations sont disponibles, j'ai décidé de mettre à jour cette réponse.
Dans Android moderne, je voudrais utiliser ConstraintLayout
pour le faire. Il est plus performant et simple.
<ConstraintLayout>
<View
Android:id="@+id/view1"
...other attributes elided... />
<View
Android:id="@id/view2"
app:layout_constraintTop_toBottomOf="@id/view1" />
...other attributes elided... />
...etc for other views that should be aligned top to bottom...
<TextView
app:layout_constraintBottom_toBottomOf="parent" />
Si vous ne souhaitez pas utiliser un objet ConstraintLayout, utiliser un objet LinearLayout avec une vue agrandie est un moyen simple et efficace de prendre de la place (voir la réponse de @Matthew Wills). Si vous ne souhaitez pas développer l'arrière-plan d'une des vues au-dessus de la vue du bas, vous pouvez ajouter une vue invisible pour occuper l'espace.
La réponse que j'ai donnée à l'origine fonctionne mais est inefficace. L’inefficacité n’est peut-être pas un problème pour une seule disposition de niveau supérieur, mais il s'agirait d’une implémentation terrible dans une variable ListView
ou RecyclerView
même niveau d'effort et de complexité sinon plus simple.
Sortez TextView de LinearLayout, puis placez LinearLayout et TextView dans un RelativeLayout. Ajoutez l'attribut Android:layout_alignParentBottom="true"
au TextView. Avec tous les espaces de noms et autres attributs, à l'exception de l'attribut ci-dessus, élidé:
<RelativeLayout>
<LinearLayout>
<!-- All your other elements in here -->
</LinearLayout>
<TextView
Android:layout_alignParentBottom="true" />
</RelativeLayout>
Vous devrez développer l'une de vos vues supérieures pour remplir l'espace restant en y définissant Android:layout_weight="1"
. Cela poussera votre dernière vue vers le bas.
Voici un bref aperçu de ce que je veux dire:
<LinearLayout Android:orientation="vertical">
<View/>
<View Android:layout_weight="1"/>
<View/>
<View Android:id="@+id/bottom"/>
</LinearLayout>
où chaque hauteur de vue enfant est "wrap_content"
et tout le reste est "fill_parent"
.
Je pense que ce sera la solution parfaite:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<!-- Other views -->
<Space
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1"/>
<!-- Target view below -->
<View
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</LinearLayout>
Vous devez placer le paramètre gravity en bas pas dans la vue texte mais dans la présentation linéaire . Comme ça:
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:gravity="bottom|end">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Something"/>
</LinearLayout>
Étape 1: Créer deux vues à l'intérieur d'une mise en page linéaire
Étape 2: La première vue doit être définie sur Android: layout_weight = "1"
Étape 3: La seconde vue sera automatiquement mise à la baisse
<LinearLayout
Android:id="@+id/botton_header"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >
<View
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1" />
<Button
Android:id="@+id/btn_health_advice"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
</LinearLayout>
FAIT COMME ÇA
<LinearLayout
Android:id="@+id/LinearLayouts02"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:gravity="bottom|end">
<TextView
Android:id="@+id/texts1"
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:layout_weight="2"
Android:text="@string/forgotpass"
Android:padding="7dp"
Android:gravity="bottom|center_horizontal"
Android:paddingLeft="10dp"
Android:layout_marginBottom="30dp"
Android:bottomLeftRadius="10dp"
Android:bottomRightRadius="50dp"
Android:fontFamily="sans-serif-condensed"
Android:textColor="@color/colorAccent"
Android:textStyle="bold"
Android:textSize="16sp"
Android:topLeftRadius="10dp"
Android:topRightRadius="10dp"
/>
</LinearLayout>
Vous pouvez aussi utiliser
Android:layout_gravity="bottom"
pour votre textview