J'aimerais arrondir les angles d'une vue et modifier également la couleur de la vue en fonction du contenu au moment de l'exécution.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
J'espérais créer un dessin et une couleur se chevaucherait, mais ce n'est pas le cas. Celui que j'exécute en second lieu est le fond résultant.
Existe-t-il un moyen de créer cette vue par programme, en gardant à l'esprit que la couleur d'arrière-plan ne sera pas décidée avant l'exécution?
edit: Je ne fais que permuter entre le rouge et le bleu pour les tests. Plus tard, la couleur sera choisie par l'utilisateur.
modifier:
tags_rounded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<corners
Android:bottomRightRadius="2dp"
Android:bottomLeftRadius="2dp"
Android:topLeftRadius="2dp"
Android:topRightRadius="2dp"/>
</shape>
Au lieu de setBackgroundColor
, récupérez l’arrière-plan dessinable et définissez sa couleur:
v.setBackgroundResource(R.drawable.tags_rounded_corners);
GradientDrawable drawable = (GradientDrawable) v.getBackground();
if (i % 2 == 0) {
drawable.setColor(Color.RED);
} else {
drawable.setColor(Color.BLUE);
}
En outre, vous pouvez définir le remplissage dans votre tags_rounded_corners.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<corners Android:radius="4dp" />
<padding
Android:top="2dp"
Android:left="2dp"
Android:bottom="2dp"
Android:right="2dp" />
</shape>
Approche programmatique totale pour définir des angles arrondis et ajouter une couleur d'arrière-plan aléatoire à une vue. Je n'ai pas testé le code, mais vous voyez l'idée.
GradientDrawable shape = new GradientDrawable();
shape.setCornerRadius( 8 );
// add some color
// You can add your random color generator here
// and set color
if (i % 2 == 0) {
shape.setColor(Color.RED);
} else {
shape.setColor(Color.BLUE);
}
// now find your view and add background to it
View view = (LinearLayout) findViewById( R.id.my_view );
view.setBackground(shape);
Nous utilisons ici un dégradé pouvant être dessiné pour pouvoir utiliser GradientDrawable#setCornerRadius
parce que ShapeDrawable
NE fournit PAS une telle méthode.
Je pense que le moyen le plus rapide de faire cela est:
GradientDrawable gradientDrawable = new GradientDrawable(
GradientDrawable.Orientation.TOP_BOTTOM, //set a gradient direction
new int[] {0xFF757775,0xFF151515}); //set the color of gradient
gradientDrawable.setCornerRadius(10f); //set corner radius
//Apply background to your view
View view = (RelativeLayout) findViewById( R.id.my_view );
if(Build.VERSION.SDK_INT>=16)
view.setBackground(gradientDrawable);
else view.setBackgroundDrawable(gradientDrawable);
Vous pouvez mieux le réaliser en utilisant le DrawableCompat comme ceci:
Drawable backgroundDrawable = view.getBackground();
DrawableCompat.setTint(backgroundDrawable, newColor);
Si vous n'avez pas d'accident vasculaire cérébral, vous pouvez utiliser
colorDrawable = resources.getDrawable(R.drawable.x_sd_circle);
colorDrawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
mais cela changera également la couleur de trait
Vous pouvez modifier dynamiquement la couleur de tout élément (mise en page, affichage du texte). Essayez ci-dessous le code pour définir la couleur par programme dans la mise en page
dans le fichier activity.Java
String quote_bg_color = "#FFC107"
quoteContainer= (LinearLayout)view.findViewById(R.id.id_quotecontainer);
quoteContainer.setBackgroundResource(R.drawable.layout_round);
GradientDrawable drawable = (GradientDrawable) quoteContainer.getBackground();
drawable.setColor(Color.parseColor(quote_bg_color));
créer layout_round.xml dans un dossier pouvant être dessiné
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@color/colorPrimaryLight"/>
<stroke Android:width="0dp" Android:color="#B1BCBE" />
<corners Android:radius="10dp"/>
<padding Android:left="0dp" Android:top="0dp" Android:right="0dp" Android:bottom="0dp" />
</shape>
layout dans le fichier activity.xml
<LinearLayout
Android:id="@+id/id_quotecontainer"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
----other components---
</LinearLayout>