Ressource de liste de couleurs suivant l'état

Un ColorStateList est un objet que vous pouvez définir en XML et appliquer en tant que couleur. Il modifie les couleurs en fonction de l'état de l'objet View auquel il est appliqué. Par exemple, un widget Button peut exister dans l'un des différents états : activé, sélectionné ou aucun. Vous pouvez fournir une couleur différente pour chaque état à l'aide d'une liste de couleurs suivant l'état.

Vous pouvez décrire la liste des états dans un fichier XML. Chaque couleur est définie dans un élément <item> au sein d'un seul élément <selector>. Chaque <item> utilise différents attributs pour décrire l'état dans lequel il est utilisé.

Lors de chaque changement d'état, la liste des états est balayée de haut en bas, et le premier élément qui correspond à l'état actuel est utilisé. La sélection n'est pas basée sur la correspondance optimale, mais sur le premier élément qui répond aux critères minimaux de l'état.

Remarque : Si vous souhaitez fournir une ressource de couleur statique, utilisez une valeur color simple.

Emplacement du fichier :
res/color/filename.xml
Le nom de fichier est utilisé comme ID de ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément ColorStateList.
Référence de la ressource :
En Java : R.color.filename
En XML : @[package:]color/filename
Syntaxe :
<?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>
Éléments :
<selector>
Obligatoire. Il s'agit de l'élément racine. Contient un ou plusieurs éléments <item>.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui est "http://schemas.android.com/apk/res/android".
<item>
Définit une couleur à utiliser pendant certains états, comme décrit par ses attributs. Il s'agit de l'enfant d'un élément <selector>.

Attributs :

android:color
Couleur hexadécimale. Obligatoire. La couleur est spécifiée avec une valeur RVB et un canal alpha facultatif.

La valeur commence toujours par le caractère dièse (#), suivi des informations Alpha Rouge Vert Bleu, dans l'un des formats suivants :

  • #RVB
  • #ARVB
  • #RRVVBB
  • #AARRVVBB
android:lStar
Virgule flottante. Facultatif. Cet attribut modifie la luminance perceptuelle de la couleur de base. Il accepte soit une valeur à virgule flottante comprise entre 0 et 100, soit un attribut thématique qui se résout en tant que tel. La couleur globale de l'élément est calculée en convertissant la couleur de base en un espace couleur favorisant l'accessibilité et en définissant sa lettre L* sur la valeur spécifiée dans l'attribut lStar.

Exemple : android:lStar="50"

android:state_pressed
Booléen. "true" si cet élément est utilisé lorsque l'utilisateur appuie sur l'objet, par exemple lorsqu'il appuie ou clique sur un bouton. Cette valeur est "false" si cet élément est utilisé dans l'état par défaut lorsque personne n'a encore appuyé dessus.
android:state_focused
Booléen. "true" si cet élément est utilisé lorsque l'objet est sélectionné, par exemple lorsqu'un bouton est mis en surbrillance à l'aide du trackball ou du pavé directionnel. Cette valeur est "false" si cet élément est utilisé avec l'état par défaut sans sélection.
android:state_selected
Booléen. "true" si cet élément est utilisé lorsque l'objet est sélectionné, par exemple lorsqu'un onglet est ouvert. Cette valeur est "false" si cet élément est utilisé lorsque l'objet n'est pas sélectionné.
android:state_checkable
Booléen. "true" si cet élément est utilisé lorsque l'objet peut être coché. Sa valeur est "false" si cet élément est utilisé lorsque l'objet ne peut pas être coché. Utile uniquement si l'objet peut passer d'un widget qui peut être coché à un widget qui ne peut pas l'être.
android:state_checked
Booléen. "true" si cet élément est utilisé lorsque l'objet est coché. Sa valeur est "false" s'il est utilisé lorsque l'objet est désélectionné.
android:state_enabled
Booléen. "true" si cet élément est utilisé lorsque l'objet est activé et qu'il peut recevoir des événements tactiles ou des événements de clic. Sa valeur est "false" s'il est utilisé lorsque l'objet est désactivé.
android:state_window_focused
Booléen. "true" si cet élément est utilisé lorsque la fenêtre de l'application est active, ce qui signifie que l'application est exécutée au premier plan. Sa valeur est "false" s'il est utilisé lorsque la fenêtre de l'application n'est pas active, par exemple si le volet des notifications est tiré vers le bas ou si une boîte de dialogue s'affiche.

Remarque : Le premier élément de la liste qui correspond à l'état actuel de l'objet est appliqué. Par conséquent, si le premier élément de la liste ne contient aucun des attributs d'état précédents, il s'applique à chaque fois. Pour cette raison, placez la valeur par défaut en dernier, comme illustré dans l'exemple suivant.

Exemple :
Fichier XML enregistré sous 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>

Le code XML de mise en page suivant applique la liste de couleurs à une View :

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />
Voir aussi :