110 votes

Le remplissage n'a pas d'effet <shape> dans une mise en page XML

J'essaie de définir le remplissage dans un <shape> déclaré dans un fichier/une mise en page XML. Mais peu importe ce que je fixe, rien ne change lié au rembourrage. Si je modifie d'autres propriétés, je vois les effets sur l'interface utilisateur. Mais ça ne marche pas avec le rembourrage. Pourriez-vous nous indiquer les raisons pour lesquelles cela pourrait se produire ?

Voici la forme XML que j'essaie de styliser :

 <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="rectangle">

    <stroke android:width="1dp" 
            android:color="#ffffff" 
            android:dashWidth="2dp"/>

    <solid android:color="@color/button_white_cover"/>

    <corners android:radius="11dp"/>

    <padding android:left="1dp" 
             android:top="20dp"
             android:right="20dp" 
             android:bottom="2dp"/>
 </shape>

124voto

Lyubomyr Dutko Points 1266

J'ai enfin résolu mon problème de rembourrage.

Donc le rembourrage ici n'aura aucun effet sur la forme. Au lieu de cela, vous devrez appliquer un rembourrage dans un autre dessinable qui l'utilisera. Donc, j'ai un dessinable qui utilise la forme et là je fais ce qui suit :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/shape_below"/>
   <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/>
</layer-list>

Ainsi, comme vous pouvez le voir dans le deuxième élément <item>, j'ai défini le remplissage (en haut et à droite). Et après ça, tout fonctionne.

- Merci. Merci.

35voto

Witoldio Points 591

Vous pouvez essayer les encarts :

<?xml version="1.0" encoding="UTF-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="2dp"
    android:insetLeft="1dp"
    android:insetRight="20dp"
    android:insetTop="20dp">

    <shape android:shape="rectangle">

        <stroke
            android:width="1dp"
            android:color="#ffffff"
            android:dashWidth="2dp" />

        <solid android:color="@color/button_white_cover" />

        <corners android:radius="11dp" />
    </shape>

</inset>

33voto

Yahel Points 5018

La réponse de Lyobomyr fonctionne, mais voici la même solution appliquée mais sans le surdébit de créer un nouveau dessinable, minimisant ainsi l'encombrement du fichier :

https://stackoverflow.com/a/3588976/578746

Copier/Coller l'anwser par anon sur la réponse SO ci-dessus :

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:left="6dp"
          android:right="6dp">

        <shape android:shape="rectangle">
            <gradient android:startColor="#ccd0d3"
                      android:centerColor="#b6babd"
                      android:endColor="#ccd0d3"
                      android:height="1px"
                      android:angle="0"/>
        </shape>
    </item>
</layer-list> 

10voto

riverlet Points 349

J'ai résolu ce problème comme ceci :

<shape android:shape="oval"  >
    <stroke android:width="4dp" android:color="@android:color/transparent" />
    <solid android:color="@color/colorAccent" />
</shape>

vient d'y ajouter un trait transparent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X