Rimuovere il divisore inferiore di un ListView Android


94

Ho un'altezza fissa ListView. Ha un divisore tra gli elementi dell'elenco, ma mostra anche i divisori dopo l'ultimo elemento dell'elenco.

C'è un modo per non visualizzare un divisore dopo l'ultimo elemento ListView?

Risposte:


183

Basta aggiungere android:footerDividersEnabled="false" alla tua descrizione ListView


29
Questo sembra non funzionare più a partire dalla 4.4.2. Posso eseguire letteralmente la stessa app sui miei numerosi dispositivi di prova (da 2.3.7 fino a 4.4.2) e KitKat è l'unico in cui questo sembra non avere alcun effetto ... Qualche idea? Non sto aggiungendo un piè di pagina o un'intestazione al mio ListView e l'ho riprodotto su due dispositivi (Nexus 5 e HTC One M8).
Charles Madere

11
@ScootrNova sto usando 4.4.4 e quando imposto la listview layoutHeight="wrap_content", il divisore inferiore scompare.
Erhannis

1
Usa background = @android: color / transparent, risolto per me
stef

ho provato questa soluzione su Android 5.1 e 7.0 e funziona perfettamente! Grazie uomo.
tomalf2

83

Come ha detto @ScootrNova, questo sembra comportarsi in modo diverso (noto anche come buggy) in Android 4.4.x (non so esattamente quando viene introdotto il problema)

Ciò è correlato al caso specifico dell'utilizzo di padding+ clipToPadding="false"- in 4.4.x il piè di pagina è disegnato fuori dalla vista ma le clip nel riempimento lo rivelano.

La soluzione che ho usato è stata impostare il footer over-scroll ( android:overScrollFooter) su trasparente che in qualche modo funziona ...

La mia soluzione finale (nota che android:footerDividersEnabledviene mantenuta per la retrocompatibilità):

<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"
    />

testato su un HTC One X con 4.1.1, un Nexus 5 con 4.4.4 e un Samsung Galaxy S5 con 4.4.2 (grazie a @ Dallas187). Sembra che funzioni anche Lollipop. (grazie ai commentatori!)


1
Confermando che questa soluzione funziona su un Samsung Galaxy S5 con 4.4.2
Dallas187

1
L'aggiunta ha android:overScrollFooterfatto il trucco per me. Lavorare su 5.0.2 e 5.1.
Edison Spencer

anzi, e credo che avrai bisogno android:footerDividersEnabled="false"di back compat
Sam

18

Se vuoi farlo tramite codice è:

listView.setFooterDividersEnabled(false);

e se stai usando un ListFragment puoi ottenere listview da:

listFragment.getListView().setFooterDividersEnabled(false);

Commentato solo perché questo risulta come # 1 in Google


2
Grazie per il codice - mi rattrista quando ci sono solo soluzioni basate su XML! Sto eseguendo il porting di un'app da iOS ad Android e finora penso che fare tutto in codice sia stato molto più veloce che se avessi provato a convertirlo tutto in un layout basato su XML (come ho definito tutta l'interfaccia utente iOS nel codice in primo luogo ). Suppongo che un giorno dovrò
concentrarmi

Non funziona per me su Pixel API 25, solo il suggerimento di Annada sembra farlo.
Tbadams

12

Sembra che la linea inferiore non funzioni sul dispositivo lecca-lecca.

listView.setFooterDividersEnabled(false);

Quindi è necessario utilizzare questo codice di seguito per rimuovere il divisore dopo l'ultimo elemento nell'elenco.

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

Questa dovrebbe essere la risposta accettata. Soluzione semplice, ha funzionato per me primo scatto.
Samah

0

Usa background = @android: color / transparent. Funziona perfettamente. Puoi comunque utilizzare lo sfondo del layout delle righe

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.