Remova o divisor inferior de um ListView Android


94

Eu tenho uma altura fixa ListView. Possui divisor entre os itens da lista, mas também exibe divisores após o último item da lista.

Existe uma maneira de não exibir um divisor após o último item em ListView?

Respostas:


183

Basta adicionar android:footerDividersEnabled="false" à sua descrição ListView


29
Isso parece não funcionar mais a partir do 4.4.2. Posso executar literalmente o mesmo aplicativo em meus vários dispositivos de teste (variando de 2.3.7 até 4.4.2) e KitKat é o único em que isso parece não ter efeito ... Alguma ideia? Não estou adicionando um rodapé ou cabeçalho ao meu ListView e reproduzi isso em dois dispositivos (Nexus 5 e HTC One M8).
Charles Madere

11
@ScootrNova Estou usando o 4.4.4 e, quando defino o listview layoutHeight="wrap_content", o divisor inferior desaparece.
Erhannis de

1
Use background = @android: color / transparent, resolveu para mim
stef

tentei esta solução no Android 5.1 e 7.0 e funciona perfeitamente! Obrigado cara.
tomalf2

83

Como @ScootrNova disse, isso parece estar se comportando de maneira diferente (também conhecido como bug) no android 4.4.x (não sei exatamente quando o problema foi apresentado)

Isso está relacionado ao caso específico de usar padding+ clipToPadding="false"- em 4.4.x o rodapé é desenhado fora da visualização, mas os clipes para preenchimento o revelam.

A solução que usei foi definir o rodapé over-scroll ( android:overScrollFooter) para transparente, o que de alguma forma funciona ...

Minha solução final (observe que android:footerDividersEnabledé mantida para compatibilidade com versões anteriores):

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

testado em um HTC One X rodando 4.1.1, um Nexus 5 rodando 4.4.4 e um Samsung Galaxy S5 rodando 4.4.2 (graças a @ Dallas187). Parece estar funcionando Lollipop também. (graças aos comentaristas!)


1
Apenas confirmando que esta solução funciona em um Samsung Galaxy S5 rodando 4.4.2
Dallas187

1
Adicionar android:overScrollFooterfez o truque para mim. Trabalhando em um 5.0.2 e 5.1.
Edison Spencer

na verdade, e eu acredito que você vai precisar android:footerDividersEnabled="false"para back compat
Sam

18

Se você quiser fazer isso por código:

listView.setFooterDividersEnabled(false);

e se você estiver usando um ListFragment, poderá obter a visualização da lista:

listFragment.getListView().setFooterDividersEnabled(false);

Apenas comentado porque aparece como nº 1 no google


2
Obrigado pelo código - fico triste quando há apenas soluções baseadas em XML! Estou portando um aplicativo do iOS para o Android e, até agora, acho que fazer tudo isso em código foi muito mais rápido do que se eu tivesse tentado converter tudo em um layout baseado em XML (já que defini toda a IU do iOS no código em primeiro lugar ) Acho que um dia terei que colocar minha cabeça em volta de todas essas coisas XML, mas não hoje :)
Herr Grumps

Não está funcionando para mim no Pixel API 25, apenas a sugestão de Annada parece funcionar.
Tbadams

12

Parece que a linha abaixo não funciona no dispositivo lollypop.

listView.setFooterDividersEnabled(false);

Portanto, precisa usar o código abaixo para remover o divisor após o último item da lista.

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

Esta deve ser a resposta aceita. Solução simples, funcionou para mim na primeira tentativa.
Samah

0

Use background = @android: color / transparent. Funciona perfeitamente. Você ainda pode usar o fundo do seu layout de linha

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.