Essa é uma pergunta muito boa sobre o layout dos itens em um ListView no Android.
Eu tenho uma atividade com uma barra de título na parte superior e um ListView ocupando o resto da tela. Quero que meu ListView apareça com preenchimento de 10dp à esquerda, direita e superior, mas quando você rolar o ListView para cima, quero que cubra o preenchimento de 10dp superior antes de desaparecer sob a borda desbotada. Da mesma forma, quando você rola para a parte inferior, o último item da lista deve aparecer com 10dp entre a parte inferior do último item da lista e a parte inferior real da tela (se você está se perguntando por que, é porque há uma bonita imagem de fundo que eu quero mostrando o ListView).
Tentei adicionar preenchimento ao próprio ListView, mas quando você rola a lista, ele desaparece sob a borda do preenchimento.
Eu sou do fundo de desenvolvimento da Web e a analogia seria adicionar margem acima do primeiro item da lista (e abaixo do último item da lista).
fonte
getListView(). addHeaderView(capView)
egetListView(). addHeaderView(botView)
certificar-se de que chamou antes de inicializar o conteúdo da lista, por exemplo. setListAdapter (adaptador);Respostas:
Você escreveu:
Defina o
ListView's
clipToPadding
atributo comofalse
. Isso habilitará o preenchimento ao redor doListView
e a rolagem até o final do layout (e não apenas até a borda do preenchimento).Um exemplo:
android:clipToPadding
é um atributo XML deViewGroup
, a classe base para layouts e visualizações de contêineres.A chamada de método relacionada é:
fonte
<item name="android:clipToPadding">false</item>
clipToPadding
um estilo não funciona para mim, é como se não fosse aplicado. Embora, se eu configurá-lo diretamente no ListView, ele funciona.android:scrollbarStyle="outsideOverlay"
de modo a barra de rolagem vai todo o caminho através do preenchimento bemO ListView acima terá um preenchimento de cabeçalho e rodapé de 20 pixels.
fonte
float mDensity = getResources().getDisplayMetrics().density; int height = (int) (50 * mDensity + 0.5f); padding.setHeight(height);
(int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
Apêndice à resposta de @ Jakobud ...
Meu listView já estava usando as
android:divider/android:dividerHeight
propriedades para criar espaços transparentes entre os itens listView. Isso me permitiu simplesmente adicionar osandroid:headerDividersEnabled
eandroid:footerDividersEnabled
propriedades e definir os pontos de vista de cabeçalho e rodapé paranew View(Activity.this)
.Pequena simplificação para casos em que você já possui divisores configurados no listView.
fonte
Minha solução usando a
ListFragment
, com base nas soluções de @Jakobud e @ greg7gkb.fonte
A resposta de @Gunnar Karlsson é boa, mas há um problema de as visualizações de células serem recicladas prematuramente quando completamente atrás do preenchimento, mas ainda não totalmente fora da tela. A definição de clipToPadding = false é responsável por isso e pode ou não ser corrigida em uma versão futura do Android. ( Ao usar o clipToPadding no ListView, os itens são reciclados prematuramente )
Eu tenho uma boa solução simples, sem efeitos colaterais:
android:dividerHeight="-10dip"
, o oposto do que está ao redor da célulaComparado com a outra resposta, não há necessidade de definir a cor do divisor. O preenchimento nas células superior e inferior estará presente, e o divisor negativo evitará divisores de altura dupla no meio.
fonte