Em uma lista estatal do Android, o State_focused é ignorado
Pergunta
Meu aplicativo Android, que usa uma tabactividade para exibir seu conteúdo, possui 4 guias que usam uma lista de estado desenhada para o ícone. Todos eles têm a mesma estrutura, apenas com imagens diferentes:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_options_dark" android:state_selected="true" android:state_focused="false" />
<item android:drawable="@drawable/icon_options_white" />
</selector>`
No entanto, ao selecionar guias com o trackball no meu desejo HTC (destaque verde), a imagem escura é usada em vez da luz. Assim que uma guia é realmente selecionada, ela se torna branca. O que estou fazendo errado?
Solução
Você precisa ter itens diferentes para estados diferentes. Combinar vários estados em um item (como você fez) está definitivamente errado. Seu XML pode ficar assim:
<xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_options_dark"
android:state_selected="true" />
<item android:drawable="@drawable/icon_options_light"
android:state_focused="true" />
<item android:drawable="@drawable/icon_options_white" />
</selector>
Quando se trata de desenhar seu desenho, o estado é verificado primeiro. Se for selecionado, o primeiro item será usado e é isso - nenhuma verificação focada será realizada (Android achados apenas primeiro - não "mais relevante" - Estado). Mas se não for selecionado, o cheque para o estado focado será realizado.