J'ai une forme définie dans le fichier xml ci-dessous, maintenant je veux passer à la couleur unie par programmation.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<solid Android:color="#DFDFE0" />
<corners
Android:bottomLeftRadius="8dp"
Android:bottomRightRadius="8dp"
Android:topLeftRadius="8dp"
Android:topRightRadius="8dp" />
<stroke
Android:width="3dp"
Android:color="#2E3135" />
</shape>
Je pense que je devrais avoir une classe qui étend ShapeDrawable et implémente la méthode onDraw. Tout le monde sait comment?
Enfin, je l'ai résolu!
// prepare
int strokeWidth = 5; // 5px not dp
int roundRadius = 15; // 15px not dp
int strokeColor = Color.parseColor("#2E3135");
int fillColor = Color.parseColor("#DFDFE0");
GradientDrawable Gd = new GradientDrawable();
Gd.setColor(fillColor);
Gd.setCornerRadius(roundRadius);
Gd.setStroke(strokeWidth, strokeColor);
Je préférerais faire de la forme en forme et ajouter du rembourrage à la forme intérieure ...
Comme ça:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item>
<shape Android:shape="rectangle">
<solid Android:color="#2E3135" />
<corners
Android:bottomLeftRadius="8dp"
Android:bottomRightRadius="8dp"
Android:topLeftRadius="8dp"
Android:topRightRadius="8dp" />
</shape>
</item>
<item
Android:bottom="3dp"
Android:left="3dp"
Android:right="3dp"
Android:top="3dp">
<shape Android:shape="rectangle">
<solid Android:color="#DFDFE0" />
<corners
Android:bottomLeftRadius="5dp"
Android:bottomRightRadius="5dp"
Android:topLeftRadius="5dp"
Android:topRightRadius="5dp" />
</shape>
</item>
</layer-list>
MISE À JOUR: J'ai trouvé que les coins de la forme intérieure devraient être plus petits pour un meilleur look ... Pour des proportions différentes, vous devrez tester quel rayon intérieur, rayon extérieur et taille de trait (le rembourrage) est le mieux pour votre solution