Supprimer le séparateur inférieur d'un Android ListView


94

J'ai une hauteur fixe ListView. Il a un séparateur entre les éléments de la liste, mais il affiche également des séparateurs après le dernier élément de la liste.

Existe-t-il un moyen de ne pas afficher de séparateur après le dernier élément ListView?

Réponses:


183

Ajoutez simplement android:footerDividersEnabled="false" à votre description ListView


29
Cela semble ne plus fonctionner à partir de 4.4.2. Je peux exécuter littéralement la même application sur mes nombreux appareils de test (allant de 2.3.7 jusqu'à 4.4.2) et KitKat est le seul où cela semble n'avoir aucun effet ... Des idées? Je n'ajoute pas de pied de page ou d'en-tête à mon ListView et je l'ai reproduit sur deux appareils (Nexus 5 et HTC One M8).
Charles Madere

11
@ScootrNova J'utilise 4.4.4, et lorsque je règle la liste layoutHeight="wrap_content", le séparateur du bas disparaît.
Erhannis

1
Utilisez background = @android: couleur / transparent, résolvez-le pour moi
stef

essayé cette solution sur Android 5.1 et 7.0 et cela fonctionne parfaitement! Merci mec.
tomalf2

83

Comme l'a dit @ScootrNova, cela semble se comporter différemment (alias buggy) sous Android 4.4.x (je ne sais pas exactement quand le problème est introduit)

Ceci est lié au cas spécifique de l'utilisation de padding+ clipToPadding="false"- dans 4.4.x, le pied de page est dessiné en dehors de la vue mais les clips au remplissage le révèlent.

La solution que j'ai utilisée était de définir le sur-défilement du pied de page ( android:overScrollFooter) sur transparent, ce qui fonctionne en quelque sorte ...

Ma solution finale (note qui android:footerDividersEnabledest conservée pour la rétro-compatibilité):

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_horizontal_margin"
    android:divider="@color/divider"
    android:dividerHeight="1px"
    android:clipToPadding="false"
    android:scrollbarStyle="outsideInset"
    android:overScrollFooter="@android:color/transparent"
    android:footerDividersEnabled="false"
    />

testé sur un HTC One X sous 4.1.1, un Nexus 5 sous 4.4.4 et un Samsung Galaxy S5 sous 4.4.2 (grâce à @ Dallas187). Semble fonctionner aussi Lollipop. (merci aux commentateurs!)


1
Il suffit de confirmer que cette solution fonctionne sur un Samsung Galaxy S5 exécutant 4.4.2
Dallas187

1
L'ajout a android:overScrollFooterfait l'affaire pour moi. Travailler sur un 5.0.2 et 5.1.
Edison Spencer

en effet, et je crois que vous aurez besoin android:footerDividersEnabled="false"d'un arrière compat
Sam

18

Si vous voulez faire cela par code, c'est:

listView.setFooterDividersEnabled(false);

et si vous utilisez un ListFragment, vous pouvez obtenir la vue de la liste par:

listFragment.getListView().setFooterDividersEnabled(false);

Uniquement commenté, car cela apparaît comme n ° 1 dans Google


2
Merci pour le code - je suis triste quand il n'y a que des solutions basées sur XML! Je porte une application d'iOS vers Android, et jusqu'à présent, je pense que faire tout cela dans le code était beaucoup plus rapide que si j'avais essayé de tout convertir en une mise en page XML (comme j'ai défini toute l'interface utilisateur iOS dans le code en premier lieu ). Je suppose qu'un jour je vais devoir me
concentrer

Ne fonctionne pas pour moi sur l'API Pixel 25, seule la suggestion d'Annada semble le faire.
Tbadams

12

Il semble que la ligne ci-dessous ne fonctionne pas sur les appareils lollypop.

listView.setFooterDividersEnabled(false);

Vous devez donc utiliser ce code ci-dessous pour supprimer le séparateur après le dernier élément de la liste.

listView.setOverscrollFooter(new ColorDrawable(Color.TRANSPARENT));

Cela devrait être la réponse acceptée. Solution simple, a fonctionné pour moi du premier coup.
Samah du

0

Utilisez background = @android: couleur / transparent. Fonctionne parfaitement. Vous pouvez toujours utiliser l'arrière-plan de votre disposition de ligne

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.