Bom dia…
Pessoas,
tenho que criar uma lista onde seus items precisam ter cores diferentes dependendo do status do item.
Ex:
Status 1 -> Cor de fundo: preto | Cor do texto: branco
Status 2 -> Cor de fundo: azul | Cor do texto: Verde
Implementei meu Adapter e faço isso no método getView(). Até agora tudo certo.
O problema é que perco aquela cor padrão do android quando um item da lista é selecionado. Com isso, ficou definido que quando o item estiver selecionado (state_focus, state_pressed), tenho que alternar as cores dos itens.
Ex:
Status 1 selecionado -> Cor de fundo: branco | Cor do texto: preto
Status 2 selecionado -> Cor de fundo: Verde | Cor do texto: Azul
A solução que encotrei para aplicar essas cores nos items, foi usar as classes StateListDrawable para o background do do Item e o método
setTextColor para o TextView.
Criei o seguinte metódo:
private void adicionaRegraDeColoracao(View view, int corFrente, int CorFundo){
int[][] estadosTexto;
int[] coresTexto;
TextView textView;
StateListDrawable estados;
textView = (TextView) view.findViewById(R.id.textview_name);
estados = new StateListDrawable();
estados.addState(new int[] {android.R.attr.state_focused}, new ColorDrawable(corFrente));
estados.addState(new int[] {android.R.attr.state_pressed }, new ColorDrawable(corFrente));
estados.addState(new int[] {android.R.attr.state_enabled }, new ColorDrawable(corFundo));
estadosTexto = new int[][] {new int[]{android.R.attr.state_pressed}, new int[]{android.R.attr.state_focused}, new int[0]};
coresTexto = new int[] { corFundo, corFundo, corFrente};
//view.setFocusable(true);
view.setBackgroundDrawable(estados);
textView.setTextColor(new ColorStateList(estadosTexto, coresTexto));
}
O que este método faz é criar duas listas de estados, uma para o objeto view(que é um linearLayout) e uma para o textView.
Testei este método num projeto teste e funcionou perfeitamente.
Mas, para itens do listView, me parece que os itens não estão pegando o status de focus ou clique. O Texto e a cor de fundo são sempre o padrão.
Fiz um teste e adicionei um OnItemSelectedListener para o listView:
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
view.requestFocus();
}
e também não alterou as cores da lista.
Caso voce tenha alguma ideia do que fazer ou do que pode estar errado, poste plz… qlqr opinião já ajuda.
Obs:
Criar XMLs com selectors, como este abaixo, resolveria meu problema, caso minhas cores não fossem criadas de uma tabela cores do banco de dados da aplicação.
Obrigado