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.