Uma ColorStateList
é um objeto que você pode definir em XML
que pode ser aplicado como uma cor, mas que mudará de tonalidade, 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 para 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, a lista de estados é percorrida de cima para baixo, e o primeiro item que
corresponde ao estado atual vai 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 vai ser usado como o ID do recurso.
- tipo de dados do recurso compilado:
- Ponteiro do recurso para um
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:lStar="floating_point_value"
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 formatos abaixo:
- #RGB
- #ARGB
- #RRGGBB
- #AARRGGBB
android:lStar
- Ponto flutuante. Opcional. Esse atributo modifica a luminância perceptível da cor base. Ele usa um
valor de ponto flutuante entre 0 e 100 ou um atributo de tema que é resolvido dessa forma. A cor
geral do item é calculada convertendo a cor da base em um espaço de cores adequado para acessibilidade
e definindo L* como o valor especificado no atributo
lStar
.
Exemplo: android:lStar="50"
android:state_pressed
- Booleano. É definido como "true" se o item precisa ser usado quando o objeto for pressionado, por exemplo, quando um botão
for pressionado ou clicado. É "false" se o item precisa ser usado no estado padrão, não pressionado.
android:state_focused
- Booleano. É definido como "true" se este o precisa ser usado quando um objeto estiver em foco, por exemplo, quando um botão
for destacado usando o trackball/botão direcional. É "false" se o item for usado no estado padrão,
sem foco.
android:state_selected
- Booleano. É definido como "true" se o item precisa ser usado quando o objeto for selecionado, por exemplo, quando uma
guia for aberta. É "false" se o item precisa ser usado quando o objeto não estiver selecionado.
android:state_checkable
- Booleano. É definido como "true" se o item precisa ser usado quando o objeto puder ser selecionado. É "false" se o
item precisa ser usado quando o objeto não puder ser selecionado. Essa 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. É definido como "true" se o item precisa ser usado quando o objeto estiver marcado. É "false" se ele
precisa ser usado quando objeto estiver desmarcado.
android:state_enabled
- Booleano. É definido como "true" se o item precisa ser usado quando o objeto for ativado (capaz de
receber eventos de toque ou clique) É "false" se ele precisa ser usado quando o objeto estiver desativado.
android:state_window_focused
- Booleano. É definido como "true" se o item precisa ser usado quando a janela do aplicativo estiver em foco (o
aplicativo está em primeiro plano). É "false" se o item precisa ser usado quando a janela do
aplicativo não tiver foco, por exemplo, se uma aba de notificações estiver 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 vai ser aplicado. Se o primeiro item na lista não contiver
nenhum dos atributos de estados acima, ele vai ser aplicado sempre, motivo pelo qual o
valor padrão precisa sempre ser o último, como demonstrado no exemplo abaixo.
- 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 vai 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" />
- Confira também:
-