Je veux avoir un bouton au bas de la liste.
Si j'utilise relativeLayout/FrameLayout, il s'aligne mais listView descend très bas.
(Derrière le bouton en bas)
FrameLayout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView
Android:id="@+id/listview"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
/>
<FrameLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_alignParentBottom="true">
<Button
Android:id="@+id/btnButton"
Android:text="Hello"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom" />
</FrameLayout>
</FrameLayout>
Disposition relative:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView
Android:id="@+id/listview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true">
<Button
Android:id="@+id/btnButton"
Android:text="Hello"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom" />
</RelativeLayout>
</RelativeLayout>
Les deux codes ci-dessus ne fonctionnent que comme la première image. Ce que je veux, c'est une deuxième image.
Quelqu'un peut aider?
Merci.
Le but de FrameLayout
est de superposer des objets les uns sur les autres. Ce n'est pas ce que tu veux.
Dans votre exemple RelativeLayout
, vous définissez la hauteur et la largeur de ListView
s sur MATCH_PARENT
cela va lui faire occuper le même espace que son parent, et ainsi occuper tout l’espace de la page (et recouvrir le bouton).
Essayez quelque chose comme:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<ListView
Android:layout_width="match_parent"
Android:layout_height="0dip"
Android:layout_weight="1"/>
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="0"/>
</LinearLayout>
Le layout_weight
_ détermine l'utilisation de l'espace supplémentaire. Le Button
ne veut pas s’étirer au-delà de l’espace requis, il a donc un poids de 0. Le ListView
veut occuper tout l’espace supplémentaire, il a donc un poids de 1. .
Vous pouvez accomplir quelque chose de similaire en utilisant RelativeLayout
, mais si ce ne sont que ces deux éléments, alors je pense qu’un LinearLayout
est plus simple.
J'avais besoin de deux boutons côte à côte en bas. J'ai utilisé une disposition linéaire horizontale, mais en assignant Android:layout_height="0dp"
et Android:layout_weight="0"
pour la disposition linéaire des boutons ne fonctionnait pas. Assigner Android:layout_height="wrap_content"
pour la disposition linéaire des boutons uniquement. Voici ma mise en page de travail:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<ListView
Android:id="@+id/listView1"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:id="@+id/new_button"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="New" />
<Button
Android:id="@+id/suggest_button"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="Suggest" />
</LinearLayout>
</LinearLayout>
<?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"
Android:background="#ffffff"
>
<ListView Android:id="@+id/ListView01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1">
</ListView>
<FrameLayout Android:id="@+id/FrameLayout01"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<Button Android:id="@+id/Button01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="button"
Android:layout_gravity="center_horizontal">
</Button>
</FrameLayout>
</LinearLayout>
Voici le design que vous recherchez. L'essayer.
RelativeLayout
ignorera ses enfants Android:layout_width
ou Android:layout_height
attributs, si les enfants ont des attributs qui définissent correctement leurs valeurs left
et right
ou top
et bottom
, respectivement.
Pour obtenir le résultat sur la bonne image, en affichant la liste au-dessus du bouton, votre mise en page doit ressembler à ceci:
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.v7.widget.RecyclerView
Android:id="@Android:id/list"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_above="@Android:id/button1"
Android:layout_alignParentTop="true"/>
<Button
Android:id="@Android:id/button1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:text="@Android:string/ok"/>
</RelativeLayout>
La clé est de définir Android:layout_alignParentTop
(définit top
valeur) et Android:layout_above
(définit bottom
valeur) dans votre RecyclerView
. De cette façon, RelativeLayout
ignorera Android:layout_height="match_parent"
, et le RecyclerView
sera placé au-dessus du Button
.
Aussi, assurez-vous de regarder dans Android:layout_alignWithParentIfMissing
, si vous avez une mise en page plus complexe et que vous devez toujours définir ces valeurs.
J'utilise Xamarin Android et mon besoin est identique à celui de William T. Mallard, ci-dessus, c'est-à-dire un ListView avec 2 boutons côte à côte situés en dessous. La solution est que cette réponse n'a pas fonctionné dans Xamarin Studio cependant - lorsque j'ai réglé la hauteur du ListView sur "0dp", le ListView a tout simplement disparu.
Mon code de travail Xamarin Android est le suivant:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView
Android:id="@+id/ListView1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:layout_above="@+id/ButtonsLinearLayout" />
<LinearLayout
Android:id="@id/ButtonsLinearLayout"
Android:layout_height="wrap_content"
Android:layout_width="fill_parent"
Android:orientation="horizontal"
Android:layout_alignParentBottom="true">
<Button
Android:id="@+id/Button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1" />
<Button
Android:id="@+id/Button2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_weight="1" />
</LinearLayout>
</RelativeLayout>
J'ai aligné ButtonsLinearLayout au bas de l'écran et défini le ListView pour qu'il soit au-dessus de ButtonsLinearLayout.
Dans votre mise en page relative de listview est match_parent
_ qui est fill_parent (pour les versions 2.1 et antérieures), la meilleure solution consiste donc à utiliser la disposition relative, puis de déclarer d'abord le bouton puis la vue en liste, positionnez la vue de la liste comme ci-dessus, faire alignParentBottom .. Snippet est
<RelativeLayout
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
Android:id="@+id/rl1"><Button
Android:layout_width="MATCH_PARENT"
Android:layout_height="WRAP_CONTENT"
/><ListView
Android:layout_width="MATCH_PARENT"
Android:layout_height="0"
Android:layout_above="@id/listview"/></RelativeLayout>
Cela empêche votre vue liste de prendre toute la place et fait apparaître votre bouton.
@ jclova une dernière chose à faire est d'utiliser layout-below=@+id/listviewid
en disposition relative