Pergunta

estou a usar ExpandableListView no meu aplicativo e uma das reclamações que recebo dos usuários é que quando o List O item é expandido, é difícil distinguir visualmente onde o item infantil termina e o próximo item de grupo começa.

Então, eu gostaria de mudar o fundo da criança List item para a sombra diferente.

Tentativas brutais que fiz até agora foram baseadas em mudar diretamente a cor e o texto dos elementos dentro da criança View Item, mas isso leva à perda de pau e destaques. Então, minha pergunta é - o que é uma boa estratégia para alcançar o acima?

eu tentei styles e selectors Mas o que realmente me incomoda é se eu mudar de plano de fundo para o item infantil, então preciso adicionar selectors Para todas as combinações de foco/ativado etc. Quando tudo estou tentando fazê -lo para substituir uma única coisa.

Existe uma maneira de herdar pai style E definir background apenas para o item infantil habilitado e não focado com outro styles retido?

Foi útil?

Solução

Nós iremos. Aqui está o que funcionou para mim:

  1. Create list_background.xml no seu projeto res/drawable diretório
  2. Defina o valor de fundo do layout de nível superior do seu item filho para o desenhado acima. Se você está coçando a cabeça neste momento - estou me referindo ao arquivo de layout XML que é usado quando você cria a visão infantil da sua lista expansível em ExpandableListAdapter#getChildView

Aqui está o arquivo desenhado completo

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:state_enabled="true"
        android:drawable="@drawable/list_highlight_active" />
    <item android:state_enabled="true" android:state_selected="true" 
        android:state_window_focused="true"
    android:drawable="@drawable/list_highlight_inactive" />
    <item android:state_enabled="true" android:state_window_focused="true" 
        android:drawable="@color/item_body" />
    <item android:drawable="@color/item_body" />
</selector>

Eu tive que copiar list_highlight_active.xml e list_highlight_inactive.xml a partir de /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable ao diretório desenhado do meu projeto. @color/item_body é apenas um tom de cinza

Outras dicas

Acabei de descobrir uma maneira de "um pouco" definir a cor de fundo sem ter que pular através dos aros do seletor.

Como você observou, definir o plano de fundo para uma cor sólida elimina os destaques do seletor, porque a nova cor de fundo a obscurece. A Droidin tem o que é a solução normal: forneça ao seu próprio seletor de fundo as cores exatas que você deseja. É uma dor dizer o mínimo.

Mas se tudo o que você quer é uma pequena diferenciação de cores, há uma maneira mais simples: Alpha Blend. Defina a cor do seu plano de fundo com um valor alfa. Por exemplo, defina um plano de fundo como "#bbffffff". Os dois primeiros dígitos indicam o nível alfa. Tudo se misturará para que o fundo não seja um branco puro e o destaque da seleção não seja o laranja brilhante normal, mas as crianças serão uma cor diferente e o destaque ainda funciona. Ganha-ganha.

Eu procuro uma solução semelhante. Você pode tentar obter visualização pai no método adaptador getChieldView. Eu acho que esse pai é uma visão pai de todos os seus Chields. E defina plano de fundo do recurso para esse pai. Eu faço assim:

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild,  View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
        View parentGroup=(View) convertView.getParent();
        parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top