Recurso da lista de estados de cor

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: