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?

mkso
fonte

Respostas:

183

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

Alex.Semeniuk
fonte
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!)

Sam
fonte
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

tmho
fonte
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));
Annada
fonte
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

stef
fonte