Obrigado pela ótima dica. Apenas para sua informação, copiar e colar me deu uma exceção de tempo de execução dizendo: "XmlPullParserException: a tag <gradient> da linha de arquivo XML binária nº 4 requer que o atributo 'angle' seja um múltiplo de 45". Facilmente remediado alterando o ângulo para 270.
25/01
Obrigado pela correção ... Mas não sei por que isso poderia estar acontecendo. Você encontrou algum motivo específico?
Legenda
@teedyay: Anytime pal :)
Legend
1
igual a todas as garras, o ângulo deve ser múltiplo de 45: "XmlPullParserException: a tag <gradient> da linha de arquivo XML binária # 4 requer que o atributo 'angle' seja um múltiplo de 45"
Youssef
29
Porém, ele não funciona bem com o destaque da seleção: quando o item superior ou inferior é selecionado, o plano de fundo colorido é retangular e desenhado na parte superior do plano de fundo com cantos arredondados.
Kris Van Bael
56
Embora isso tenha funcionado, também removeu toda a cor de fundo. Eu estava procurando uma maneira de fazer apenas a borda e apenas substituir esse código de layout XML por este e estava pronto!
Para aqueles que têm problemas com a seleção, destaque para a linha superior e inferior, onde o retângulo de fundo aparece na seleção, você precisa definir o seletor para a sua exibição de lista em cores transparentes.
não funcionou para mim. Eu adicionei a seguinte linha, no entanto, e ela se livrou dela:android:cacheColorHint="@android:color/transparent"
cesar
1
Definitivamente, isso corrigiu o problema de seleção para mim - obrigado! Você também pode usar android.R.color.transparent para a cor Selector em vez de criar a sua própria.
Greg7gkb
3
Em vez de fazê-lo através de programação, adicionar este à sua ListView no layout XML para esconder seleção de cores: android: listSelector = "# 00000000"
Elad Nava
@alvins Existe alguma maneira de tornar o Layout selecionável para destacar como o item de exibição de lista?
Bharat Dodeja
o que devo fazer se quiser usar uma cor opaca para listSelector?
suitianshi
3
As outras respostas são muito úteis, graças aos autores!
Mas não consegui ver como personalizar o retângulo ao destacar um item na seleção, em vez de desabilitar o realce @alvins @bharat dojeha.
A seguir, trabalha para mim criar um contêiner de item de exibição de lista arredondado sem contorno e um cinza mais claro quando selecionado da mesma forma:
Seu xml precisa conter um seletor como, por exemplo, (em res / drawable / costumeshape.xml):
Ainda outra solução para a seleção destaca problemas com o primeiro e o último itens da lista:
Adicione preenchimento na parte superior e inferior do fundo da lista igual ou superior ao raio. Isso garante que o destaque da seleção não se sobreponha às suas curvas de canto.
Essa é a solução mais fácil quando você precisa de um destaque de seleção não transparente.
<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"><solidandroid:color="@color/listbg"/><strokeandroid:width="2dip"android:color="#D5D5D5"/><cornersandroid:radius="10dip"/><!-- Make sure bottom and top padding match corner radius --><paddingandroid:bottom="10dip"android:left="2dip"android:right="2dip"android:top="10dip"/></shape>
Isso foi incrivelmente útil para mim. Gostaria de sugerir outra solução alternativa para destacar perfeitamente os cantos arredondados, se você estiver usando seu próprioCustomAdapter .
Definindo arquivos XML
Primeiro de tudo, vá para dentro da sua pasta de desenho e crie 4 formas diferentes:
Estou usando uma exibição personalizada que eu layout em cima dos outros e que apenas desenha os 4 cantos pequenos na mesma cor que o plano de fundo. Isso funciona independentemente do conteúdo da visualização e não aloca muita memória.
Respostas:
Aqui está uma maneira de fazê-lo (graças à documentação do Android!):
Adicione o seguinte em um arquivo (por exemplo, costumeshape.xml) e, em seguida, coloque-o em (res / drawable / costumeshape.xml)
Depois de criar esse arquivo, basta definir o plano de fundo de uma das seguintes maneiras:
Através do código:
listView.setBackgroundResource(R.drawable.customshape);
Por meio do XML , basta adicionar o seguinte atributo ao contêiner (ex: LinearLayout ou a qualquer campo):
Espero que alguém ache útil ...
fonte
Embora isso tenha funcionado, também removeu toda a cor de fundo. Eu estava procurando uma maneira de fazer apenas a borda e apenas substituir esse código de layout XML por este e estava pronto!
fonte
@ kris-van-bael
Para aqueles que têm problemas com a seleção, destaque para a linha superior e inferior, onde o retângulo de fundo aparece na seleção, você precisa definir o seletor para a sua exibição de lista em cores transparentes.
Em color.xml, adicione o seguinte -
fonte
android:cacheColorHint="@android:color/transparent"
As outras respostas são muito úteis, graças aos autores!
Mas não consegui ver como personalizar o retângulo ao destacar um item na seleção, em vez de desabilitar o realce @alvins @bharat dojeha.
A seguir, trabalha para mim criar um contêiner de item de exibição de lista arredondado sem contorno e um cinza mais claro quando selecionado da mesma forma:
Seu xml precisa conter um seletor como, por exemplo, (em res / drawable / costumeshape.xml):
Em seguida, você precisa implementar um adaptador de lista e substituir o método getView para definir o seletor personalizado como plano de fundo
e também preciso "ocultar" o retângulo do seletor padrão, por exemplo, no onCreate (também oculto minha fina linha divisória cinza entre os itens):
Essa abordagem resolve uma solução geral para drawables, não apenas o ListViewItem com vários estados de seleção.
fonte
Atualizar
A solução hoje em dia é usar um
CardView
com suporte para cantos arredondados incorporados.Resposta original *
Outra maneira que encontrei foi mascarar seu layout desenhando uma imagem por cima do layout. Isso pode ajudá-lo. Confira os cantos cortados arredondados do XML do Android
fonte
Ainda outra solução para a seleção destaca problemas com o primeiro e o último itens da lista:
Adicione preenchimento na parte superior e inferior do fundo da lista igual ou superior ao raio. Isso garante que o destaque da seleção não se sobreponha às suas curvas de canto.
Essa é a solução mais fácil quando você precisa de um destaque de seleção não transparente.
fonte
Na verdade, acho que a melhor solução está descrita neste link:
http://blog.synyx.de/2011/11/android-listview-with-rounded-corners/
em resumo, usa um plano de fundo diferente para os itens superior, médio e inferior, para que os itens superior e inferior sejam arredondados.
fonte
Isso foi incrivelmente útil para mim. Gostaria de sugerir outra solução alternativa para destacar perfeitamente os cantos arredondados, se você estiver usando seu próprio
CustomAdapter
.Definindo arquivos XML
Primeiro de tudo, vá para dentro da sua pasta de desenho e crie 4 formas diferentes:
shape_top
shape_normal
shape_bottom
shape_rounded
Agora, crie um layout de linha diferente para cada forma, ou seja, para
shape_top
:Você também pode fazer isso programaticamente alterando o plano de fundo.
E defina um seletor para cada lista em forma, ou seja, para
shape_top
:Mude seu CustomAdapter
Por fim, defina as opções de layout dentro de
CustomAdapter
:E pronto!
fonte
fazer fronteira u tem que fazer outro arquivo xml com propriedade solid e cantos na pasta drawable e chama em background
fonte
Estou usando uma exibição personalizada que eu layout em cima dos outros e que apenas desenha os 4 cantos pequenos na mesma cor que o plano de fundo. Isso funciona independentemente do conteúdo da visualização e não aloca muita memória.
fonte