web-dev-qa-db-fra.com

Séparateur (diviseur) après le dernier élément de ListView

Lorsque je crée une mise en page simple avec seulement un ListView, il n'y a aucun séparateur affiché après le dernier élément, qui a l'air un peu moche.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true" />
</RelativeLayout>

enter image description here

Cependant, j'ai découvert qu'un séparateur est affiché après le dernier élément si j'ajoute une autre vue au-dessous de listview et que je définis l'attribut Android:layout_above pour la listview.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_above="@+id/bottom"
        Android:layout_alignParentTop="true" />

    <TextView
        Android:id="@+id/bottom"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:background="@Android:color/holo_blue_dark"
        Android:text="Bottom" />
</RelativeLayout>

enter image description here

Pourquoi le listview se comporte comme ça? Comment puis-je obtenir un séparateur après le dernier élément d'une mise en page contenant uniquement une vue en liste?

50
Natix

La réponse est très simple: vous devriez changer Android:layout_height="wrap_content" en Android:layout_height="match_parent" dans votre ListView.

Vous pouvez probablement deviner pourquoi cela se produit.

98
Vitali Olshevski

Avez-vous essayé celui-ci?

Android:footerDividersEnabled="true"

sinon essayez ceci 

<View
Android:background="#00ff00"
Android:layout_width="fill_parent"
Android:layout_height="3dp"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/YOUR_LIST_ID" />
15
Gridtestmail

Ajouter une vue vide en haut (et/ou en bas) pour créer un séparateur en haut (ou en bas)

myList.addHeaderView(new View(context));
myList.addFooterView(new View(context));
7
Steven L

Je suis venu avec un bidouillage qui résout ce problème. Le dernier séparateur n'étant affiché que si une autre vue suit la vue liste, il est possible de rendre cette seconde vue invisible en définissant son layout_height sur 0dp.

C'est toujours un hack, mais jusqu'à la dernière division, l'apparence est cohérente, il est donc préférable d'essayer de créer manuellement une ligne horizontale en essayant de deviner la bonne couleur et les bonnes dimensions.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_above="@+id/invisible"
        Android:layout_alignParentTop="true" />

    <View
        Android:id="@+id/invisible"
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_alignParentBottom="true" />    
</RelativeLayout>
2
Natix

Je fais quelque chose de similaire à ce que décrit @Natix, mais au lieu de jouer avec la disposition contenant de la liste, j'ajoute simplement la vue vide en tant que pied de page de la liste via ListView.addFooterView ()

1
Roberto Andrade

Cela semble quelque peu différent lorsque votre listview est affichée si vous la codez comme ça. Mais même vous pouvez suivre cela aussi.

Définissez d'abord un style nommé Line

<style name="Line">
    <item name="Android:layout_width">fill_parent</item>
    <item name="Android:layout_height">2px</item>
    <item name="Android:background">@color/white</item>
</style>

// Dans le style ci-dessus, vous pouvez modifier la hauteur de la ligne selon vos besoins.

Où que vous souhaitiez utiliser la ligne ci-dessus, vous pouvez la déclarer comme ceci dans votre fichier xml.

<LinearLayout
Android:orientation = "vertical"
.......................
............................>
 <ListView
        Android:id="@Android:id/list"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
         />


<View
        style="@style/Line"/>

</LinearLayout>

Le code ci-dessus crée une ligne sous votre liste. Le code ci-dessus est particulièrement utile lorsque vous souhaitez l’utiliser à divers endroits de votre projet. Ou si vous voulez à un seul endroit, vous pouvez le faire comme ça.

 <LinearLayout
    Android:orientation = "vertical"
    .......................
    ............................>
     <ListView
            Android:id="@Android:id/list"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
             />
<View
    Android:layout_width="fill_parent"
        Android:layout_height="1px"
        Android:background="#20b2aa" />

</LinearLayout>

J'espère que cela t'aides. BTW La raison est vague et même une fois, j’ai cherché cela et j’ai suivi le chemin que j’ai expliqué plus haut.

0
Kanth