web-dev-qa-db-fra.com

Dessiner plusieurs formes avec ShapeDrawable en xml avec Android

Je dessine actuellement un certain nombre de cercles sur une toile dans une vue personnalisée en code. les cercles sont statiques et ne changent pas. Je voudrais les dessiner en utilisant un ShapeDrawable en xml pour aider à nettoyer mon code. J'aurai un certain nombre de drawables différents que l'utilisateur peut sélectionner et donc je ne veux pas le faire dans le code. avoir 3 ou 4 drawables xml me semble beaucoup plus propre.

J'ai créé un cercle en xml à l'aide d'un ShapeDrawable mais je ne peux pas ajouter plus d'une forme au xml.

Comment ajouter plusieurs formes à un document xml à l'aide de ShapeDrawable.

49
skyfoot

Je pense avoir trouvé une solution pour ajouter plusieurs formes à mon fichier xml en utilisant Layer-list. Je n'ai pas encore essayé cela, mais cela semble être exactement ce que je veux car les formes seront dessinées dans l'ordre de leur index de tableau.

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item>
      <shape>
         <solid Android:color="#FFF8F8F8" />
      </shape>
   </item>
   <item Android:top="23px">
      <shape>
         <solid Android:color="#FFE7E7E8" />
      </shape>
   </item>
</layer-list>

Article de blog

documents Android

43
skyfoot

Voici comment j'ai fait un cercle rouge rempli avec une bordure noire d'un pixel, avec un nombre blanc 72 au milieu:

Créez un fichier XML dans res\drawable et nommez-le de manière appropriée, par exemple red_circle_black_border.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="oval">
            <solid Android:color="@Android:color/black" />
        </shape>
    </item>
    <item Android:top="1dp" Android:left="1dp" Android:right="1dp" Android:bottom="1dp">
        <shape Android:shape="oval">
            <solid Android:color="@Android:color/red" />
        </shape>
    </item>
</layer-list>

Ensuite, pour l'utiliser dans votre mise en page, déclarez-le comme suit:

<TextView
    Android:text="72"
    Android:textSize="14dp"
    Android:textStyle="bold"
    Android:background="@drawable/red_circle_black_border" 
    Android:layout_width="22dp"
    Android:layout_height="22dp"
    Android:gravity="center_vertical|center_horizontal"
    Android:textColor="@Android:color/white" />

Évidemment, changez le textSize et la layout_width/height comme requis :-)

84
Kenton Price