Usuń dolny separator ListView systemu Android

94

Mam stałą wysokość ListView. Ma separator między elementami listy, ale wyświetla również separatory po ostatnim elemencie listy.

Czy istnieje sposób, aby nie wyświetlać separatora po ostatniej pozycji w ListView?

mkso
źródło

Odpowiedzi:

183

Po prostu dodaj android:footerDividersEnabled="false" do opisu ListView

Alex.Semeniuk
źródło
29
Wydaje się, że to już nie działa, począwszy od 4.4.2. Mogę uruchomić dosłownie tę samą aplikację na wielu moich urządzeniach testowych (od 2.3.7 aż do 4.4.2), a KitKat jest jedynym, na którym wydaje się to nie mieć żadnego efektu ... Jakieś pomysły? Nie dodaję stopki ani nagłówka do mojego ListView i odtworzyłem to na dwóch urządzeniach (Nexus 5 i HTC One M8).
Charles Madere,
11
@ScootrNova Używam 4.4.4, a kiedy ustawię widok listy layoutHeight="wrap_content", dolny separator znika.
Erhannis,
1
Użyj background = @android: color / transparent, rozwiązałem to dla mnie
stef
wypróbowałem to rozwiązanie na Androidzie 5.1 i 7.0 i działa doskonale! Dzięki.
tomalf2
83

Jak powiedział @ScootrNova, wydaje się, że zachowuje się inaczej (inaczej buggy) w Androidzie 4.4.x (nie wiem dokładnie, kiedy problem jest wprowadzany)

Jest to związane z konkretnym przypadkiem użycia padding+ clipToPadding="false"- w 4.4.x stopka jest rysowana poza widokiem, ale klipsy do wypełnienia ujawniają to.

Rozwiązaniem, które zastosowałem, było ustawienie stopki over-scroll ( android:overScrollFooter) na przezroczystą, co jakoś działa ...

Moje ostateczne rozwiązanie (uwaga, które android:footerDividersEnabledjest zachowane ze względu na wsteczną kompatybilność):

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

przetestowano na HTC One X z systemem 4.1.1, Nexusie 5 z systemem 4.4.4 i Samsung Galaxy S5 z systemem 4.4.2 (dzięki @ Dallas187). Wydaje się, że działa też Lollipop. (dzięki komentatorom!)

Sam
źródło
1
Tylko potwierdzenie, że to rozwiązanie działa na
Samsungu
1
Dodanie android:overScrollFooterzałatwiło mi sprawę. Pracuję nad wersją 5.0.2 i 5.1.
Edison Spencer,
rzeczywiście, i myślę, że będziesz potrzebować android:footerDividersEnabled="false"wstecznej kompatybilności
Sam
18

Jeśli chcesz to zrobić kodem, to:

listView.setFooterDividersEnabled(false);

a jeśli używasz ListFragment, możesz uzyskać widok listy przez:

listFragment.getListView().setFooterDividersEnabled(false);

Skomentował tylko, ponieważ pojawia się jako nr 1 w Google

tmho
źródło
2
Dziękuję za kod - jest mi smutno, gdy są tylko rozwiązania oparte na XML! Przenoszę aplikację z iOS na Androida i do tej pory myślę, że robienie tego wszystkiego w kodzie było znacznie szybsze niż gdybym próbował przekonwertować to wszystko na układ oparty na XML (tak jak zdefiniowałem cały interfejs iOS w kodzie w pierwszej kolejności) ). Przypuszczam, że któregoś dnia będę musiał się rozejrzeć po całej tej XML-owej rzeczy, ale nie dzisiaj :)
Herr Grumps
Nie działa dla mnie na Pixel API 25, wydaje się, że wystarczy sugestia Annady.
Tbadams
12

Wygląda na to, że poniższa linia nie działa na urządzeniu Lollypop.

listView.setFooterDividersEnabled(false);

Więc musisz użyć poniższego kodu, aby usunąć separator po ostatniej pozycji na liście.

listView.setOverscrollFooter(new ColorDrawable(Color.TRANSPARENT));
Annada
źródło
To powinna być akceptowana odpowiedź. Proste rozwiązanie, zadziałało u mnie pierwsze ujęcie.
Samah
0

Użyj background = @android: color / transparent. Działa świetnie. Nadal możesz używać tła układu wierszy

stef
źródło