Ressource de liste de couleurs suivant l'état
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
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 :
-
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Color state list resource\n\nA [ColorStateList](/reference/android/content/res/ColorStateList)\nis an object you can define in XML and apply as a color that actually changes colors depending on\nthe state of the [View](/reference/android/view/View) object it is\napplied to. For example, a [Button](/reference/android/widget/Button)\nwidget can exist in one of several states: pressed, focused, or neither. Using a color state list,\nyou can provide a different color for each state.\n\nYou describe the state list in an XML file. Each color is defined in an `\u003citem\u003e` element inside a single `\u003cselector\u003e` element. Each `\u003citem\u003e`\nuses various attributes to describe the state in which it is used.\n\nDuring each state change, the state list is traversed top to bottom, and the first item that\nmatches the current state is used. The selection is *isn't* based on the \"best\"\nmatch, but rather the first item that meets the minimum criteria of the state.\n\n**Note:** If you want to provide a static color resource, use a\nsimple [color](/guide/topics/resources/more-resources#Color) value.\n\nfile location:\n: `res/color/`*filename*`.xml` \n\n The filename is used as the resource ID.\n\ncompiled resource datatype:\n: Resource pointer to a [ColorStateList](/reference/android/content/res/ColorStateList)\n\nresource reference:\n:\n In Java: `R.color.`*filename* \n\n In XML: `@[`*package* `:]color/`*filename*\n\nsyntax:\n:\n\n ```xml\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cselector xmlns:android=\"http://schemas.android.com/apk/res/android\" \u003e\n \u003citem\n android:color=\"hex_color\"\n android:lStar=\"floating_point_value\"\n android:state_pressed=[\"true\" | \"false\"]\n android:state_focused=[\"true\" | \"false\"]\n android:state_selected=[\"true\" | \"false\"]\n android:state_checkable=[\"true\" | \"false\"]\n android:state_checked=[\"true\" | \"false\"]\n android:state_enabled=[\"true\" | \"false\"]\n android:state_window_focused=[\"true\" | \"false\"] /\u003e\n \u003c/selector\u003e\n ```\n\nelements:\n:\n\n `\u003cselector\u003e`\n : **Required.** This is the root element. Contains one or more `\u003citem\u003e` elements.\n\n Attributes:\n\n `xmlns:android`\n : *String* . **Required.** Defines the XML namespace, which is\n `\"http://schemas.android.com/apk/res/android\"`.\n\n `\u003citem\u003e`\n : Defines a color to use during certain states, as described by its attributes. It is a\n child of a `\u003cselector\u003e` element.\n\n Attributes:\n\n `android:color`\n : *Hexadeximal color* . **Required** . The color is specified with an\n RGB value and optional alpha channel.\n\n The value always begins with a pound (`#`) character, followed by the\n Alpha-Red-Green-Blue information in one of the following formats:\n\n - #*RGB*\n - #*ARGB*\n - #*RRGGBB*\n - #*AARRGGBB*\n\n `android:lStar`\n : *Floating point* . **Optional** . This attribute modifies the base color's perceptual luminance. It takes either a\n floating-point value between 0 and 100 or a theme attribute that resolves as such. The item's\n overall color is calculated by converting the base color to an accessibility friendly color space\n and setting its L\\* to the value specified on the `lStar` attribute.\n\n Example: `android:lStar=\"50\"`\n\n `android:state_pressed`\n : *Boolean* . `\"true\"` if this item is used when the object is tapped, such as when a button\n is touched or clicked. It's `\"false\"` if this item is used in the default, non-tapped state.\n\n `android:state_focused`\n : *Boolean* . `\"true\"` if this item is used when the object is focused, such as when a button\n is highlighted using the trackball or D-pad. It's `\"false\"` if this item is used in the default,\n non-focused state.\n\n `android:state_selected`\n : *Boolean* . `\"true\"` if this item is used when the object is selected, such as when a\n tab is opened. It's `\"false\"` if this item it used when the object isn't selected.\n\n `android:state_checkable`\n : *Boolean* . `\"true\"` if this item is used when the object is checkable. It's `\"false\"` if this\n item is used when the object isn't checkable. Only useful if the object can\n transition between a checkable and non-checkable widget.\n\n `android:state_checked`\n : *Boolean* . `\"true\"` if this item is used when the object is checked. It's `\"false\"` if it\n is used when the object is deselected.\n\n `android:state_enabled`\n : *Boolean* . `\"true\"` if this item is used when the object is enabled, capable of\n receiving touch or click events. It's `\"false\"` if it is used when the object is disabled.\n\n `android:state_window_focused`\n : *Boolean* . `\"true\"` if this item is used when the application window has focus,\n meaning the\n application is in the foreground. It's `\"false\"` if this item is used when the application\n window doesn't have focus, such as if the notification shade is pulled down or a dialog appears.\n\n **Note:** The first item in the state list that\n matches the current state of the object is applied. So, if the first item in the list contains\n none of the preceding state attributes, then it applies every time. For this reason, place your\n default value last, as shown in the following example.\n\n\nexample:\n : XML file saved at `res/color/button_text.xml`: \n\n ```xml\n \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n \u003cselector xmlns:android=\"http://schemas.android.com/apk/res/android\"\u003e\n \u003citem android:state_pressed=\"true\"\n android:color=\"#ffff0000\"/\u003e \u003c!-- pressed --\u003e\n \u003citem android:state_focused=\"true\"\n android:color=\"#ff0000ff\"/\u003e \u003c!-- focused --\u003e\n \u003citem android:color=\"#ff000000\"/\u003e \u003c!-- default --\u003e\n \u003c/selector\u003e\n ```\n\n\n The following layout XML applies the color list to a `View`:\n\n ```xml\n \u003cButton\n android:layout_width=\"fill_parent\"\n android:layout_height=\"wrap_content\"\n android:text=\"@string/button_text\"\n android:textColor=\"@color/button_text\" /\u003e\n ```\n\nsee also:\n:\n - [Color (simple value)](/guide/topics/resources/more-resources#Color)\n - [ColorStateList](/reference/android/content/res/ColorStateList)\n - [State list drawable](/guide/topics/resources/drawable-resource#StateList)"]]