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?

Odpowiedzi:


183

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


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!)


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


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));

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.