Uma ColorStateList
é um objeto que você pode definir em XML e usar como uma cor que muda de tonalidade, dependendo do
estado do objeto View
em que ele
é usado. Por exemplo, um widget Button
pode existir em um de vários estados: pressionado, focado ou nenhum dos dois. Usando uma lista de estados de cor,
é possível fornecer uma cor diferente para cada estado.
Descreva uma lista de estados 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 é usado.
Durante cada mudança, a lista de estados é percorrida de cima abaixo, e o primeiro item que
corresponde ao estado atual é usado. A seleção não se baseia na "melhor"
correspondência, mas no primeiro item que atende aos critérios mínimos do estado.
Observação: se você quiser fornecer um recurso de cor estática, use um
valor color simples.
- Localização do arquivo:
res/color/filename.xml
O nome do arquivo é usado como ID de recurso.
- Tipo de dados do recurso compilado:
- Ponteiro do 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: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. Esse é o elemento raiz. Contém um ou mais elementos
<item>
.
Atributos:
xmlns:android
- String. Obrigatório. Define o namespace XML, que é
"http://schemas.android.com/apk/res/android"
.
<item>
- Define a cor usada durante certos estados, conforme descrito pelos atributos correspondentes. Ele é
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.
"true"
, se o item é usado quando o objeto é tocado, por exemplo, quando um botão
é tocado ou clicado. "false"
, se o item é usado no estado padrão não tocado.
android:state_focused
- Booleano.
"true"
, se o item é usado quando o objeto está em foco, por exemplo, quando um botão
é destacado usando o trackball ou botão direcional. "false"
, se o item é usado no estado
padrão sem foco.
android:state_selected
- Booleano.
"true"
, se o item é usado quando o objeto é selecionado, por exemplo, quando uma
guia é aberta. "false"
, se o item é usado quando o objeto não está selecionado.
android:state_checkable
- Booleano.
"true"
, se o item é usado quando o objeto pode ser marcado. "false"
, se o
item é usado quando o objeto não pode ser marcado. Essa função é útil somente quando o objeto pode fazer a
transição entre um widget selecionável e não selecionável.
android:state_checked
- Booleano.
"true"
, se o item é usado quando o objeto está marcado. "false"
, se o
item é usado quando o objeto está desmarcado.
android:state_enabled
- Booleano.
"true"
, se o item é usado quando o objeto está ativado e pode
receber eventos de toque ou clique. "false"
, se o item é usado quando o objeto está desativado.
android:state_window_focused
- Booleano.
"true"
, se o item é usado quando a janela do aplicativo está em foco,
ou seja,
quando o aplicativo está em primeiro plano. "false"
, se o item é usado quando a janela
do aplicativo não está em foco, por exemplo, quando a aba de notificações está suspensa ou uma caixa de diálogo é exibida.
Observação: o primeiro item na lista de estados que
corresponder ao estado atual do objeto será usado. Portanto, se o primeiro item na lista não tiver
nenhum dos atributos de estado acima, ele será usado sempre. Por esse motivo, coloque o
valor padrão por último, conforme mostrado 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>
O XML de layout a seguir aplica a lista de cores a uma View
:
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textColor="@color/button_text" />
- Confira também:
-