Ressources drawables

Une ressource drawable est un concept général pour un graphique qui peut être dessiné à l'écran et que vous pouvez récupérer avec des API telles que getDrawable(int) ou appliquer à une autre ressource XML avec des attributs tels que android:drawable et android:icon. Il existe plusieurs types de drawables :

Fichier bitmap
Fichier graphique bitmap (PNG, WEBP, JPG ou GIF). Permet de créer un BitmapDrawable.
Fichier Nine-Patch
Fichier PNG avec des zones extensibles permettant le redimensionnement des images en fonction du contenu (.9.png). Permet de créer un NinePatchDrawable.
Liste de calques
Drawable qui gère un tableau d'autres éléments drawables. Ils sont dessinés dans l'ordre du tableau, afin que l'élément ayant l'indice le plus élevé soit dessiné au-dessus. Permet de créer un LayerDrawable.
Liste des états
Fichier XML qui fait référence à différents graphiques bitmap pour différents états (par exemple, utiliser une autre image lorsque l'utilisateur appuie sur un bouton). Permet de créer un StateListDrawable.
Liste de niveaux
Fichier XML qui définit un drawable capable de gérer divers autres drawables, chacun étant associé à une valeur numérique maximale. Permet de créer un LevelListDrawable.
Drawable de transition
Fichier XML qui définit un drawable pouvant effectuer un fondu entre deux ressources drawables. Permet de créer un TransitionDrawable.
Drawable insérable
Fichier XML qui définit un drawable qui insère un autre drawable à la distance spécifiée. Cela s'avère utile lorsqu'une vue nécessite un drawable d'arrière-plan plus petit que la dimension réelle de cette vue.
Drawable rognable
Fichier XML qui définit un drawable capable de rogner un autre élément drawable en fonction de sa valeur de niveau actuelle. Permet de créer un ClipDrawable.
Drawable échelonnable
Fichier XML qui définit un drawable capable de modifier la taille d'un autre élément drawable en fonction de sa valeur de niveau actuelle. Permet de créer un ScaleDrawable
.
Drawable géométrique
Fichier XML qui définit une forme géométrique, y compris les couleurs et les dégradés. Permet de créer un GradientDrawable.

Pour découvrir comment créer un AnimationDrawable, consultez le document Ressources d'animation.

Remarque : Une ressource de couleur peut également être utilisée comme drawable en XML. Par exemple, lorsque vous créez un drawable de liste d'états, vous pouvez référencer une ressource de couleur pour l'attribut android:drawable (android:drawable="@color/green").

Bitmap

Image bitmap. Android prend en charge les fichiers bitmap aux formats suivants : PNG (recommandé), WEBP (recommandé, niveau d'API 17 ou supérieur), JPG (acceptable), GIF (déconseillé).

Vous pouvez référencer directement un fichier bitmap, en utilisant le nom de fichier comme ID de ressource, ou créer un ID de ressource alias en XML.

Remarque : Les fichiers bitmap peuvent être automatiquement optimisés avec une compression d'image sans perte grâce à l'outil aapt pendant le processus de compilation. Par exemple, un fichier PNG de couleur réelle qui ne nécessite pas plus de 256 couleurs peut être converti en fichier PNG de 8 bits avec une palette de couleurs. Une image de qualité égale qui nécessite moins de mémoire est ainsi générée.

Par conséquent, gardez à l'esprit que les versions binaires d'images placées dans ce répertoire peuvent changer lors de la compilation. Si vous prévoyez de lire une image sous la forme d'un flux de bits pour la convertir en bitmap, placez plutôt vos images dans le dossier res/raw/, où elles ne seront pas optimisées.

Fichier bitmap

Un fichier bitmap est un fichier PNG, WEBP, JPG ou GIF. Android crée une ressource Drawable pour chacun de ces fichiers lorsque vous les enregistrez dans le répertoire res/drawable/.

Emplacement du fichier :
res/drawable/filename.png (.png, .webp, .jpg ou .gif)
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément BitmapDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Exemple :
Avec une image enregistrée à l'emplacement res/drawable/myimage.png, ce fichier XML de mise en page applique l'image à une vue :
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />

Le code d'application suivant récupère l'image en tant que Drawable :

Kotlin

val drawable: Drawable? = ResourcesCompat.getDrawable(resources, R.drawable.myimage, null)

Java

Resources res = getResources();
Drawable drawable = ResourcesCompat.getDrawable(res, R.drawable.myimage, null);
Voir aussi :

Bitmap XML

Un bitmap XML est une ressource définie en XML qui pointe vers un fichier bitmap. Cela permet de créer un alias pour un fichier bitmap brut. Le fichier XML peut spécifier des propriétés supplémentaires pour le bitmap telles que le tramage ou le mode mosaïque.

Remarque : Vous pouvez utiliser un élément <bitmap> en tant qu'enfant d'un élément <item>. Par exemple, lorsque vous créez une liste d'états ou une liste de calques, vous pouvez exclure l'attribut android:drawable d'un élément <item> et y imbriquer un élément <bitmap> qui définit l'élément drawable.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément BitmapDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
Éléments :
<bitmap>
Obligatoire. Définit la source bitmap et ses propriétés.

Attributs :

xmlns:android
Chaîne. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android". Cet attribut n'est requis que si <bitmap> est l'élément racine. Il n'est pas nécessaire lorsque <bitmap> est imbriqué dans un élément <item>.
android:src
Ressource drawable. Obligatoire. Référence à une ressource drawable.
android:antialias
Booléen. Active ou désactive l'anticrénelage.
android:dither
Booléen. Active ou désactive le tramage du bitmap s'il n'a pas la même configuration de pixel que l'écran, tel qu'un bitmap ARVB 8888 sur un écran RVB 565.
android:filter
Booléen. Active ou désactive le filtrage par bitmap. Le filtrage est utilisé lorsque le bitmap est rétréci ou étiré pour lisser son apparence.
android:gravity
Mot clé. Définit la gravité pour le bitmap. La gravité indique où positionner le drawable dans son conteneur si le bitmap est plus petit que le conteneur.

Doit correspondre à au moins une des valeurs constantes suivantes, séparées par | :

ValeurDescription
top Placer l'objet en haut de son conteneur, sans modifier sa taille.
bottom Placer l'objet au bas de son conteneur, sans modifier sa taille.
left Placer l'objet sur le bord gauche de son conteneur, sans modifier sa taille.
right Placer l'objet sur le bord droit de son conteneur, sans modifier sa taille.
center_vertical Placer l'objet au centre vertical de son conteneur, sans modifier sa taille.
fill_vertical Augmenter la taille verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur.
center_horizontal Placer l'objet au centre horizontal de son conteneur, sans modifier sa taille.
fill_horizontal Augmenter la taille horizontale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur.
center Placer l'objet au centre de son conteneur, sur l'axe vertical et l'axe horizontal, sans modifier sa taille.
fill Augmenter la taille horizontale et verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur. Ce paramètre est la valeur par défaut.
clip_vertical Option supplémentaire pouvant être définie pour que les bords supérieur et/ou inférieur de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité verticale : une gravité supérieure rognera le bord inférieur tandis qu'une gravité inférieure rognera le bord supérieur, mais cela n'aura pas d'effet sur les deux bords simultanément.
clip_horizontal Option supplémentaire pouvant être définie pour que les bords gauche et/ou droit de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité horizontale : une gravité gauche rognera le bord droit, une gravité droite rognera le bord gauche, mais cela n'aura pas d'effet sur les deux bords simultanément.
android:mipMap
Booléen. Active ou désactive l'indicateur de mipmap. Pour en savoir plus, consultez setHasMipMap(). La valeur par défaut est "false".
android:tileMode
Mot clé. Définit le mode mosaïque. Lorsque le mode mosaïque est activé, le bitmap est répété. Lorsque le mode mosaïque est activé, la gravité n'est pas prise en compte.

Doit correspondre à l'une des valeurs constantes suivantes :

ValeurDescription
disabled Ne pas mettre le bitmap en mosaïque. Il s'agit de la valeur par défaut.
clamp Répliquer la couleur du contour si le nuanceur dessine en dehors de ses limites d'origine.
repeat Répéter l'image du nuanceur horizontalement et verticalement.
mirror Répéter l'image du nuanceur horizontalement et verticalement, en alternant des images miroir pour assurer le fondu des images adjacentes.
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
Voir aussi :

Nine-Patch

NinePatch désigne une image PNG dans laquelle vous pouvez définir des zones extensibles qu'Android adapte lorsque le contenu de la vue dépasse les contours d'origine de l'image. On attribue généralement ce type d'image en arrière-plan d'une vue dont au moins une dimension est définie sur "wrap_content".

Lorsque la vue s'agrandit pour s'adapter au contenu, l'image Nine-Patch est ajustée pour correspondre à la taille de cette vue. L'arrière-plan utilisé par le widget Button standard d'Android, qui doit s'étirer pour s'adapter au texte (ou à l'image) à l'intérieur du bouton, est un bon exemple d'utilisation d'une image Nine-Patch.

Comme pour un bitmap normal, vous pouvez référencer un fichier Nine-Patch directement ou depuis une ressource définie par XML.

Pour en savoir plus sur la création d'un fichier Nine-Patch avec des zones extensibles, consultez la section Créer des bitmaps redimensionnables (fichiers 9-patch).

Fichier Nine-Patch

Emplacement du fichier :
res/drawable/filename.9.png
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément NinePatchDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Exemple :
Avec une image enregistrée à l'emplacement res/drawable/myninepatch.9.png, ce fichier XML de mise en page applique le fichier Nine-Patch à une vue :
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />
Voir aussi :

XML Nine-Patch

Une ressource XML Nine-Patch est une ressource définie en XML qui pointe vers un fichier Nine-Patch. Le XML peut spécifier le tramage de l'image.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément NinePatchDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />
Éléments :
<nine-patch>
Obligatoire. Définit la source du fichier Nine-Patch et ses propriétés.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android".
android:src
Ressource drawable. Obligatoire. Référence à un fichier Nine-Patch.
android:dither
Booléen. Active ou désactive le tramage du bitmap s'il n'a pas la même configuration de pixel que l'écran, tel qu'un bitmap ARVB 8888 sur un écran RVB 565.
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

Liste de calques

Un LayerDrawable est un objet drawable qui gère un tableau d'autres drawables. Chaque drawable de la liste est dessiné dans l'ordre de la liste. Le dernier drawable est dessiné sur le dessus.

Chaque drawable est représenté par un élément <item> dans un élément <layer-list> unique.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément LayerDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>
Éléments :
<layer-list>
Obligatoire. Il doit s'agir 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 doit être "http://schemas.android.com/apk/res/android".
<item>
Définit un drawable à placer dans le drawable du calque, à une position définie par ses attributs. Doit être un enfant d'un élément <layer-list>. Accepte les éléments <bitmap> enfants.

Attributs :

android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable.
android:id
ID de ressource. ID de ressource unique pour ce drawable. Pour créer un ID de ressource pour cet élément, utilisez le format suivant : "@+id/name". Le signe plus indique qu'il s'agit d'un nouvel ID. Vous pouvez utiliser cet identifiant pour récupérer et modifier le drawable avec View.findViewById() ou Activity.findViewById().
android:top
Dimension. Décalage vers le haut, en tant que valeur de dimension ou de ressource de dimension.
android:right
Dimension. Décalage vers la droite, en tant que valeur de dimension ou ressource de dimension.
android:bottom
Dimension. Décalage vers le bas, en tant que valeur de dimension ou ressource de dimension.
android:left
Dimension. Décalage vers la gauche, en tant que valeur de dimension ou ressource de dimension.

Par défaut, tous les éléments drawables sont ajustés pour s'adapter à la taille de la vue parent. Ainsi, si vous placez vos images dans une liste de calques à différentes positions, la taille de la vue risque d'augmenter, et certaines images s'adapteront en conséquence.

Pour éviter de redimensionner des éléments de la liste, utilisez un élément <bitmap> à l'intérieur de l'élément <item> pour spécifier le drawable et définir la gravité sur un élément qui n'est pas à l'échelle, comme "center". Par exemple, l'élément <item> suivant définit un élément qui évolue pour s'adapter à l'affichage de son conteneur :

<item android:drawable="@drawable/image" />

Pour éviter une mise à l'échelle, l'exemple suivant utilise un élément <bitmap> avec une gravité centrée :

<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>
exemple :
Fichier XML enregistré sous res/drawable/layers.xml :
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

Cet exemple utilise un élément <bitmap> imbriqué afin de définir la ressource drawable pour chaque élément avec une gravité "center". Cela garantit qu'aucune image n'est ajustée à la taille du conteneur, en raison du redimensionnement causé par les images en décalage.

Ce fichier XML de mise en page applique le drawable à une vue :

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

Le résultat est une pile d'images de plus en plus décalées :

voir aussi :

Liste des états

Un StateListDrawable est un objet drawable défini en XML qui utilise plusieurs images pour représenter le même graphique, en fonction de l'état de l'objet. Par exemple, l'état d'un widget Button peut indiquer que l'utilisateur a appuyé dessus, l'a sélectionné ou ni l'un, ni l'autre. À l'aide d'un drawable de liste d'états, vous pouvez fournir une image de fond différente pour chaque état.

Vous pouvez décrire la liste des états dans un fichier XML. Chaque image est représentée par un élément <item> dans un élément <selector> unique. Chaque <item> utilise différents attributs pour décrire l'état dans lequel il est utilisé comme graphique pour le drawable.

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 plutôt sur le premier élément qui répond aux critères minimaux de l'état.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément StateListDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>
Éléments :
<selector>
Obligatoire. Il doit s'agir 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 doit être "http://schemas.android.com/apk/res/android".
android:constantSize
Booléen. "True" si la taille interne signalée du drawable reste constante à mesure que l'état change (la taille correspond au maximum de tous les états) ; "false" si la taille varie en fonction de l'état actuel. La valeur par défaut est "false".
android:dither
Booléen. "True" pour permettre le tramage du bitmap s'il n'a pas la même configuration de pixel que l'écran (par exemple, un bitmap ARVB 8888 avec un écran RVB 565) ; "false" pour désactiver le tramage. La valeur par défaut est "true".
android:variablePadding
Booléen. "True" si la marge intérieure du drawable change en fonction de l'état actuel sélectionné ; "false" si la marge intérieure doit rester la même, en fonction de la marge maximale de tous les états. Pour activer cette fonctionnalité, vous devez gérer la mise en page performante lorsque l'état change, ce qui n'est souvent pas accepté. La valeur par défaut est "false".
<item>
Définit un drawable à utiliser pendant certains états, comme décrit par ses attributs. Doit être un enfant d'un élément <selector>.

Attributs :

android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable.
android:state_pressed
Booléen. "True" si cet élément est utilisé lorsque l'utilisateur appuie sur l'objet (par exemple, un bouton) ; "false" si cet élément est utilisé avec l'état par défaut où personne n'a encore appuyé sur le bouton.
android:state_focused
Booléen. "True" si cet élément est utilisé lorsque l'objet est sélectionné en entrée (par exemple, lorsque l'utilisateur sélectionne une entrée de texte) ; "false" si cet élément est utilisé dans l'état par défaut où personne ne l'a encore sélectionné.
android:state_hovered
Booléen. "True" si cet élément est utilisé lorsque le curseur pointe sur l'objet ; false si cet élément est utilisé dans l'état par défaut lorsque personne n'a encore pu pointer le curseur. Souvent, ce drawable peut être identique à celui utilisé pour l'état "sélectionné".

Introduit dans le niveau d'API 14.

android:state_selected
Booléen. "true" si cet élément est utilisé lorsque l'objet fait partie de la sélection actuelle de l'utilisateur lors de la navigation avec une commande directionnelle (par exemple, lors de la navigation dans une liste avec un pavé directionnel) ; "false" si cet élément est utilisé lorsque l'objet n'est pas sélectionné.

L'état sélectionné est utilisé lorsque le android:state_focused n'est pas suffisant (par exemple, lorsque la vue sous forme de liste est sélectionnée et qu'un élément y est sélectionné avec un pavé directionnel).

android:state_checkable
Booléen. "True" si cet élément est utilisé lorsque l'objet est sélectionnable ; "false" s'il est utilisé lorsque l'objet n'est pas sélectionnable. N'est utile que si l'objet peut passer d'un widget sélectionnable à un widget non sélectionnable.
android:state_checked
Booléen. "True" si cet élément est utilisé lorsque l'objet est sélectionné ; "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é, c'est-à-dire capable de recevoir des événements tactiles ou des événements de clic ; "false" s'il est utilisé lorsque l'objet est désactivé.
android:state_activated
Booléen. "True" si cet élément est utilisé lorsque l'objet est activé en tant que sélection persistante (par exemple pour mettre en surbrillance l'élément de liste précédemment sélectionné dans une vue de navigation persistante) ; "false" s'il est utilisé lorsque l'objet n'est pas activé.

Introduit dans le niveau d'API 11.

android:state_window_focused
Booléen. "True" si cet élément est utilisé lorsque la fenêtre de l'application est active (autrement dit, l'application est exécutée au premier plan) ; "false" si cet élément est utilisé lorsque la fenêtre de l'application n'est pas sélectionnée (par exemple, si le volet des notifications est tiré vers le bas ou si une boîte de dialogue s'affiche).

Remarque : Android applique le premier élément de la liste d'états qui correspond à l'état actuel de l'objet. Par conséquent, si le premier élément de la liste ne contient aucun des attributs d'état précédents, il est appliqué à chaque fois. C'est pourquoi votre valeur par défaut doit toujours apparaître en dernier, comme illustré dans l'exemple suivant.

Exemple :
Fichier XML enregistré sous res/drawable/button.xml :
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

Ce code XML de mise en page applique le drawable de liste d'états à un bouton :

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />
Voir aussi :

Liste de niveaux

Drawable qui gère plusieurs autres objets drawables, chacun étant associé à une valeur numérique maximale. Définir la valeur de niveau du drawable avec setLevel() charge la ressource drawable dans la liste de niveaux dont la valeur android:maxLevel est supérieure ou égale à la valeur transmise à la méthode.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément LevelListDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>
Éléments :
<level-list>
Obligatoire. Il doit s'agir 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 doit être "http://schemas.android.com/apk/res/android".
<item>
Définit un drawable à utiliser à un certain niveau.

Attributs :

android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable à insérer.
android:maxLevel
Nombre entier. Niveau maximal autorisé pour cet élément.
android:minLevel
Nombre entier. Niveau minimal autorisé pour cet élément.
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

Une fois appliqué à un View, le niveau peut être modifié avec setLevel() ou setImageLevel().

voir aussi :

Drawable de transition

Un TransitionDrawable est un objet drawable qui peut effectuer un fondu croisé entre deux autres ressources drawables.

Chaque drawable est représenté par un élément <item> dans un élément <transition> unique. Deux éléments au maximum sont acceptés. Pour effectuer la transition, appelez startTransition(). Pour effectuer la transition vers l'arrière, appelez reverseTransition().

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément TransitionDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>
Éléments :
<transition>
Obligatoire. Il doit s'agir 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 doit être "http://schemas.android.com/apk/res/android".
<item>
Définit un drawable à utiliser dans la transition drawable. Doit être un enfant d'un élément <transition>. Accepte les éléments <bitmap> enfants.

Attributs :

android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable.
android:id
ID de ressource. ID de ressource unique pour ce drawable. Pour créer un ID de ressource pour cet élément, utilisez le format suivant : "@+id/name". Le signe plus indique qu'il s'agit d'un nouvel ID. Vous pouvez utiliser cet identifiant pour récupérer et modifier le drawable avec View.findViewById() ou Activity.findViewById().
android:top
Nombre entier. Décalage vers le haut, en pixels.
android:right
Nombre entier. Décalage à droite, en pixels.
android:bottom
Nombre entier. Décalage vers le bas, en pixels.
android:left
Nombre entier. Décalage à gauche, en pixels.
exemple :
Fichier XML enregistré sous res/drawable/transition.xml :
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>

Ce fichier XML de mise en page applique le drawable à une vue :

<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

Le code suivant effectue une transition de 500 ms du premier élément au second :

Kotlin

val button: ImageButton = findViewById(R.id.button)
val drawable: Drawable = button.drawable
if (drawable is TransitionDrawable) {
    drawable.startTransition(500)
}

Java

ImageButton button = (ImageButton) findViewById(R.id.button);
Drawable drawable = button.getDrawable();
if (drawable instanceof TransitionDrawable) {
    ((TransitionDrawable) drawable).startTransition(500);
}
voir aussi :

Drawable insérable

Drawable défini en XML qui insère un autre drawable selon une distance spécifiée. Cela s'avère utile lorsqu'une vue a besoin d'un arrière-plan plus petit que ses limites réelles.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément InsetDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />
Éléments :
<inset>
Obligatoire. Définit le drawable encart. Il doit s'agir de l'élément racine.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android".
android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable à insérer.
android:insetTop
Dimension. Encart supérieur, en tant que valeur de dimension ou ressource de dimension.
android:insetRight
Dimension. Encart à droite, en tant que valeur de dimension ou ressource de dimension.
android:insetBottom
Dimension. Encart inférieur, en tant que valeur de dimension ou ressource de dimension.
android:insetLeft
Dimension. Encart à gauche, en tant que valeur de dimension ou ressource de dimension
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />
voir aussi :

Drawable rognable

Drawable défini en XML qui rogne un autre drawable en fonction de son niveau actuel. Vous pouvez contrôler la largeur et la hauteur de l'élément enfant pouvant être rognées en fonction du niveau, ainsi que la gravité pour contrôler son emplacement dans son conteneur global. En général, il est utilisé pour implémenter des éléments tels que des barres de progression.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément ClipDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />
Éléments :
<clip>
Obligatoire. Définit le drawable rognable. Il doit s'agir de l'élément racine.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android".
android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable à rogner.
android:clipOrientation
Mot clé. Orientation du rognage.

Doit correspondre à l'une des valeurs constantes suivantes :

ValeurDescription
horizontal Rognez le drawable horizontalement.
vertical Rognez le drawable verticalement.
android:gravity
Mot clé. Indique l'emplacement du rognage dans le drawable.

Doit correspondre à au moins une des valeurs constantes suivantes, séparées par | :

ValeurDescription
top Placer l'objet en haut de son conteneur, sans modifier sa taille. Lorsque la valeur de clipOrientation est "vertical", le rognage a lieu en bas du drawable.
bottom Placer l'objet au bas de son conteneur, sans modifier sa taille. Lorsque clipOrientation est défini sur "vertical", le rognage a lieu en haut du drawable.
left Placer l'objet sur le bord gauche de son conteneur, sans modifier sa taille. Ce paramètre est la valeur par défaut. Lorsque clipOrientation est défini sur "horizontal", le rognage a lieu à droite du drawable.
right Placer l'objet sur le bord droit de son conteneur, sans modifier sa taille. Lorsque clipOrientation est défini sur "horizontal", le rognage a lieu à gauche du drawable.
center_vertical Placer l'objet au centre vertical de son conteneur, sans modifier sa taille. Le comportement du rognage est identique à celui de la gravité lorsqu'elle est "center".
fill_vertical Augmenter la taille verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur. Lorsque clipOrientation est défini sur "vertical", aucun rognage n'a lieu, car le drawable remplit l'espace vertical (sauf si le niveau du drawable est 0, auquel cas il n'est pas visible).
center_horizontal Placer l'objet au centre horizontal de son conteneur, sans modifier sa taille. Le comportement du rognage est identique à celui de la gravité lorsqu'elle est "center".
fill_horizontal Augmenter la taille horizontale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur. Lorsque clipOrientation est défini sur "horizontal", aucun rognage n'a lieu, car le drawable remplit l'espace horizontal (sauf si le niveau du drawable est 0, auquel cas il n'est pas visible).
center Placer l'objet au centre de son conteneur, sur l'axe vertical et l'axe horizontal, sans modifier sa taille. Lorsque clipOrientation est défini sur "horizontal", le rognage se produit à gauche et à droite. Lorsque clipOrientation est défini sur "vertical", le rognage s'effectue en haut et en bas.
fill Augmenter la taille horizontale et verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur. Aucun rognage n'a lieu, car le drawable remplit l'espace horizontal et vertical (sauf si le niveau du drawable est 0, auquel cas il n'est pas visible).
clip_vertical Option supplémentaire pouvant être définie pour que les bords supérieur et/ou inférieur de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité verticale : une gravité supérieure rognera le bord inférieur tandis qu'une gravité inférieure rognera le bord supérieur, mais cela n'aura pas d'effet sur les deux bords simultanément.
clip_horizontal Option supplémentaire pouvant être définie pour que les bords gauche et/ou droit de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité horizontale : une gravité gauche rognera le bord droit, une gravité droite rognera le bord gauche, mais cela n'aura pas d'effet sur les deux bords simultanément.
exemple :
Fichier XML enregistré sous res/drawable/clip.xml :
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

Le code XML de mise en page suivant applique le drawable rognable à une vue :

<ImageView
    android:id="@+id/image"
    android:src="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Le code suivant récupère le drawable et augmente la quantité de rognage pour révéler progressivement l'image :

Kotlin

val imageview: ImageView = findViewById(R.id.image)
val drawable: Drawable = imageview.background
if (drawable is ClipDrawable) {
    drawable.level = drawable.level + 1000
}

Java

ImageView imageview = (ImageView) findViewById(R.id.image);
Drawable drawable = imageview.getBackground();
if (drawable instanceof ClipDrawable) {
    ((ClipDrawable)drawable).setLevel(drawable.getLevel() + 1000);
}

En augmentant le niveau, vous réduisez la quantité de rognage et l'image s'affiche lentement. Ici, le niveau est de 7 000 :

Remarque : Le niveau par défaut est 0, car il est entièrement rogné afin que l'image ne soit pas visible. Lorsque le niveau est de 10 000, l'image n'est pas rognée et entièrement visible.

Voir aussi :

Drawable échelonnable

Un drawable défini en XML qui modifie la taille d'un autre drawable en fonction de son niveau actuel.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément ScaleDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />
Éléments :
<scale>
Obligatoire. Définit le drawable échelonnable. Il doit s'agir de l'élément racine.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android".
android:drawable
Ressource drawable. Obligatoire. Référence à une ressource drawable.
android:scaleGravity
Mot clé. Spécifie la position de gravité après la mise à l'échelle.

Doit correspondre à au moins une des valeurs constantes suivantes, séparées par | :

ValeurDescription
top Placer l'objet en haut de son conteneur, sans modifier sa taille.
bottom Placer l'objet au bas de son conteneur, sans modifier sa taille.
left Placer l'objet sur le bord gauche de son conteneur, sans modifier sa taille. Ce paramètre est la valeur par défaut.
right Placer l'objet sur le bord droit de son conteneur, sans modifier sa taille.
center_vertical Placer l'objet au centre vertical de son conteneur, sans modifier sa taille.
fill_vertical Augmenter la taille verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur.
center_horizontal Placer l'objet au centre horizontal de son conteneur, sans modifier sa taille.
fill_horizontal Augmenter la taille horizontale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur.
center Placer l'objet au centre de son conteneur, sur l'axe vertical et l'axe horizontal, sans modifier sa taille.
fill Augmenter la taille horizontale et verticale de l'objet si nécessaire pour qu'il remplisse entièrement son conteneur.
clip_vertical Option supplémentaire pouvant être définie pour que les bords supérieur et/ou inférieur de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité verticale : une gravité supérieure rognera le bord inférieur tandis qu'une gravité inférieure rognera le bord supérieur, mais cela n'aura pas d'effet sur les deux bords simultanément.
clip_horizontal Option supplémentaire pouvant être définie pour que les bords gauche et/ou droit de l'élément enfant soient rognés et adaptés au contour de son conteneur. Le rognage se base sur la gravité horizontale : une gravité gauche rognera le bord droit, une gravité droite rognera le bord gauche, mais cela n'aura pas d'effet sur les deux bords simultanément.
android:scaleHeight
Pourcentage. Hauteur de l'échelle, exprimée en pourcentage de la limite du drawable. Le format de la valeur est XX %, par exemple 100 % ou 12,5 %.
android:scaleWidth
Pourcentage. Largeur de l'échelle, exprimée en pourcentage de la limite du drawable. Le format de la valeur est XX %, par exemple 100 % ou 12,5 %.
Exemple :
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />
voir aussi :

Drawable géométrique

Il s'agit d'une forme générique définie en XML.

Emplacement du fichier :
res/drawable/filename.xml
Le nom de fichier est l'ID de la ressource.
Type de données de la ressource compilée :
Pointeur de ressource vers un élément GradientDrawable.
Référence de la ressource :
En Java : R.drawable.filename
En XML : @[package:]drawable/filename
Syntaxe :
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    <gradient
        android:angle="integer"
        android:centerX="float"
        android:centerY="float"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>
Éléments :
<shape>
Obligatoire. Drawable géométrique. Il doit s'agir de l'élément racine.

Attributs :

xmlns:android
Chaîne. Obligatoire. Définit l'espace de noms XML, qui doit être "http://schemas.android.com/apk/res/android".
android:shape
Mot clé. Définit le type de forme. Les valeurs possibles sont les suivantes :
ValeurDescription
"rectangle" Rectangle qui remplit la vue parent. Il s'agit de la forme par défaut.
"oval" Forme ovale qui correspond aux dimensions de la vue parent.
"line" Ligne horizontale qui occupe toute la largeur de la vue parent. Cette forme nécessite que l'élément <stroke> définisse la largeur de la ligne.
"ring" Forme circulaire.

Les attributs suivants ne sont utilisés que lorsque android:shape="ring" :

android:innerRadius
Dimension. Rayon de la partie intérieure du cercle (le trou situé au milieu), sous forme de valeur de dimension ou de ressource de dimension.
android:innerRadiusRatio
Float. Rayon de la partie intérieure du cercle, exprimé sous forme de ratio de la largeur du cercle. Par exemple, si la valeur est android:innerRadiusRatio="5", le rayon intérieur est égal à la largeur du cercle divisée par 5. Cette valeur est remplacée par android:innerRadius. La valeur par défaut est 9.
android:thickness
Dimension. Épaisseur du cercle, en tant que valeur de dimension ou ressource de dimension.
android:thicknessRatio
Float. Épaisseur du cercle exprimée sous forme de ratio de la largeur du cercle. Par exemple, si la valeur est android:thicknessRatio="2", l'épaisseur équivaut à la largeur du cercle divisée par 2. Cette valeur est remplacée par android:innerRadius. La valeur par défaut est 3.
android:useLevel
Booléen. "True" en cas d'utilisation comme LevelListDrawable. Normalement, cette valeur est "false". Dans le cas contraire, la forme pourrait ne pas s'afficher.
<corners>
Crée des angles arrondis pour la forme. S'applique uniquement lorsque la forme est un rectangle.

Attributs :

android:radius
Dimension. Rayon de tous les angles, en tant que valeur de dimension ou ressource de dimension. Elle est remplacée pour chaque coin par les attributs suivants.
android:topLeftRadius
Dimension. Rayon de l'angle supérieur gauche, en tant que valeur de dimension ou ressource de dimension.
android:topRightRadius
Dimension. Rayon de l'angle supérieur droit, en tant que valeur de dimension ou ressource de dimension.
android:bottomLeftRadius
Dimension. Rayon de l'angle inférieur gauche, en tant que valeur de dimension ou ressource de dimension.
android:bottomRightRadius
Dimension. Rayon de l'angle inférieur droit, en tant que valeur de dimension ou ressource de dimension.

Remarque : Tous les angles doivent initialement disposer d'un rayon supérieur à 1, sinon aucun angle n'est arrondi. Si vous souhaitez que des angles spécifiques ne soient pas arrondis, vous pouvez utiliser android:radius pour définir un rayon d'angle par défaut supérieur à 1, puis remplacer chaque occurrence par les valeurs qui vous intéressent, en saisissant 0 ("0dp") là où vous ne voulez pas d'angles arrondis.

<gradient>
Spécifie une couleur de dégradé pour la forme.

Attributs :

android:angle
Nombre entier. Angle du dégradé, en degrés. 0 de gauche à droite, 90 de bas en haut. Il doit s'agir d'un multiple de 45. La valeur par défaut est 0.
android:centerX
Float. Position X relative du centre du dégradé (0 - 1,0).
android:centerY
Float. Position Y relative du centre du dégradé (0 - 1,0).
android:centerColor
Couleur. Couleur facultative qui apparaît entre les couleurs de début et de fin, sous forme de valeur hexadécimale ou de ressource de couleur.
android:endColor
Couleur. Couleur de fin, sous forme de valeur hexadécimale ou de ressource de couleur.
android:gradientRadius
Float. Rayon du dégradé. Appliqué uniquement lorsque android:type="radial".
android:startColor
Couleur. Couleur de départ, sous forme de valeur hexadécimale ou de ressource de couleur.
android:type
Mot clé. Type de modèle de dégradé à appliquer. Les valeurs possibles sont les suivantes :
ValeurDescription
"linear" Dégradé linéaire. Ce paramètre est la valeur par défaut.
"radial" Dégradé radial. La couleur de début est au centre.
"sweep" Dégradé linéaire balayé.
android:useLevel
Booléen. "True" en cas d'utilisation comme LevelListDrawable.
<padding>
Marge intérieure à appliquer à l'élément de la vue parent (correspond à la position du contenu de la vue, et non à la forme).

Attributs :

android:left
Dimension. Marge intérieure gauche, en tant que valeur de dimension ou ressource de dimension
android:top
Dimension. Marge intérieure supérieure, en tant que valeur de dimension ou ressource de dimension.
android:right
Dimension. Marge intérieure droite, en tant que valeur de dimension ou ressource de dimension.
android:bottom
Dimension. Marge intérieure inférieure, en tant que valeur de dimension ou ressource de dimension.
<size>
Taille de la forme.

Attributs :

android:height
Dimension. Hauteur de la forme, en tant que valeur de dimension ou ressource de dimension.
android:width
Dimension. Largeur de la forme, en tant que valeur de dimension ou ressource de dimension.

Remarque : Par défaut, la forme s'adapte à la taille de la vue parent, proportionnellement aux dimensions définies ici. Lorsque vous utilisez la forme dans un ImageView, vous pouvez restreindre la mise à l'échelle en définissant android:scaleType sur "center".

<solid>
Couleur unie pour remplir la forme.

Attributs :

android:color
Couleur. Couleur à appliquer à la forme, en tant que valeur hexadécimale ou ressource de couleur.
<stroke>
Ligne de trait pour la forme.

Attributs :

android:width
Dimension. Épaisseur de la ligne, en tant que valeur de dimension ou ressource de dimension.
android:color
Couleur. Couleur de la ligne, en tant que valeur hexadécimale ou ressource de couleur.
android:dashGap
Dimension. Distance entre les tirets, en tant que valeur de dimension ou ressource de dimension. Valide uniquement si android:dashWidth est défini.
android:dashWidth
Dimension. Taille de chaque trait d'union, en tant que valeur de dimension ou ressource de dimension. Valide uniquement si android:dashGap est défini.
exemple :
Fichier XML enregistré sous res/drawable/gradient_box.xml :
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

Ce fichier XML de mise en page applique le drawable géométrique à une vue :

<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Ce code d'application appelle le drawable géométrique et l'applique à une vue :

Kotlin

val shape: Drawable? = getDrawable(resources, R.drawable.gradient_box, getTheme())

val tv: TextView = findViewById(R.id.textview)
tv.background = shape

Java

Resources res = getResources();
Drawable shape = ResourcesCompat.getDrawable(res, R.drawable.gradient_box, getTheme());

TextView tv = (TextView)findViewById(R.id.textview);
tv.setBackground(shape);
voir aussi :