Um ColorStateList
é um objeto que você pode definir em XML
que pode ser aplicado como uma cor, mas que mudará de cor, dependendo do estado do objeto
View
em que é aplicado. Por exemplo, um widget Button
pode existir em um dos vários estados diferentes (pressionado, focado
ou nenhum) e, usando uma lista de cores, você pode fornecer uma cor diferente durante cada estado.
Você pode descrever uma lista de estado em um arquivo XML. Cada cor é definida em um elemento <item>
dentro de um elemento <selector>
único. Cada <item>
usa vários atributos para descrever o estado em que deve ser usado.
Durante cada mudança de estado, a lista de estados é percorrida de cima para baixo, e o primeiro item que
corresponde ao estado atual será usado. A seleção não se baseia na "melhor
correspondência", mas simplesmente no primeiro item que atenda aos critérios mínimos do estado.
Observação: se você quiser fornecer um recurso de cor estática, use um
valor de Cor simples.
- localização do arquivo:
res/color/filename.xml
O nome do arquivo será usado como o ID do recurso.
- tipo de dados do recurso compilado:
- Ponteiro de recurso para uma
ColorStateList
.
- referência de recurso:
-
Em Java:
R.color.filename
Em XML: @[package:]color/filename
- sintaxe:
-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
- elementos:
-
<selector>
- Obrigatório. Precisa ser o elemento raiz. Contém um ou mais elementos
<item>
.
atributos:
xmlns:android
- String. Obrigatório. Define o namespace XML, que precisa ser
"http://schemas.android.com/apk/res/android"
.
<item>
- Define a cor usada durante certos estados, como descrito pelos atributos correspondentes. Precisa ser um
filho de um elemento
<selector>
.
atributos:
android:color
- Cor hexadecimal. Obrigatório. A cor é especificada com um
valor RGB e um canal Alfa opcional.
O valor sempre começa com um caractere cerquilha (#) seguido pela
informação Alpha-Red-Green-Blue em um dos seguintes formatos:
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
android:state_pressed
- Booleano. "True" se este item precisa ser usado quando o objeto é pressionado, por exemplo, quando um botão
é pressionado ou clicado. "False" se este item precisa ser usado no estado padrão, não pressionado.
android:state_focused
- Booleano. "True" se este item precisa ser usado quando um objeto está em foco, por exemplo, quando um botão
é destacado usando o trackball/botão direcional. "False" se este item for usado no estado padrão,
sem foco.
android:state_selected
- Booleano. "True" se este item precisa ser usado quando o objeto é selecionado, por exemplo, quando uma
guia é aberta. "False" se este item precisa ser usado quando o objeto não está selecionado.
android:state_checkable
- Booleano. "True" se este item precisa ser usado quando o objeto pode ser selecionado, "false" se este
item precisa ser usado quando o objeto não pode ser selecionado. Esta função é útil somente se o objeto puder fazer a
transição entre um widget selecionável e não selecionável.
android:state_checked
- Booleano. "True" se este item precisa ser usado quando o objeto estiver marcado; "false" se ele
precisa ser usado quando objeto estiver desmarcado.
android:state_enabled
- Booleano. "True" se este item precisa ser usado quando o objeto é ativado (capaz de
receber eventos de toque ou clique); "false" se ele precisa ser usado quando o objeto está desativado.
android:state_window_focused
- Booleano. "True" se este item precisa ser usado quando a janela do aplicativo estiver em foco (o
aplicativo está em primeiro plano). "False" se este item precisa ser usado quando a janela do
aplicativo não tiver foco, por exemplo, se uma aba de notificações está suspensa ou uma caixa de diálogo for exibida.
Observação: o primeiro item na lista de estados que
corresponde ao estado atual do objeto será aplicado. Portanto, se o primeiro item na lista não contiver
nenhum dos atributos de estados acima, ele será aplicado sempre, motivo pelo qual seu
valor padrão precisa sempre ser o último, como demonstrado no exemplo a seguir.
- exemplo:
- Arquivo XML salvo em
res/color/button_text.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff000000"/> <!-- default -->
</selector>
Este XML de layout aplicará a lista de cores a uma visualização:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- veja também:
-