J'essaie de définir un rembourrage dans une <shape>
déclaration dans un fichier / une mise en page XML. Mais quoi que je définisse, rien ne change en ce qui concerne le rembourrage. Si je modifie d'autres propriétés, je vois les effets sur l'interface utilisateur. Mais cela ne fonctionne pas avec le rembourrage. Pourriez-vous s'il vous plaît indiquer les raisons possibles 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>
la source
<item>
accepte les enfants dessinables (bien que cela ne soit pas explicitement documenté). C'est ainsi que vous pouvez obtenir ce comportement dans un seul XML.<shape><padding>
-il ?Comme quelques commentaires l'ont fait allusion, la meilleure approche consiste à envelopper l' élément
<shape>
dans un<item>
élément et à y définir le remplissage à la place. Il existe cependant d'autres options disponibles qui sont détaillées dans le lien ci-dessous. par exemple<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:left="8dp" android:right="8dp" android:top="8dp" android:bottom="8dp"> <shape android:shape="rectangle"> ... </shape> </item> </layer-list>
Selon vos besoins, au lieu d'utiliser une liste de couches, vous pouvez utiliser l'un des types de dessin suivants:
Pour plus d'informations sur les types de dessin disponibles, consultez cette documentation Android
Sources:
la source
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
Vous pouvez essayer les inserts:
<?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>
la source
La réponse de Lyobomyr fonctionne, mais voici la même solution appliquée mais sans la surcharge de création d'un nouveau dessinable, minimisant ainsi l'encombrement des fichiers:
https://stackoverflow.com/a/3588976/578746
Copiez / collez la réponse par anon sur la réponse SO ci-dessus:
<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>
la source
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.
la source