Je voudrais arrondir les coins d'une vue et également changer 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 que définir un dessin et une couleur se chevaucheraient, mais ce n'est pas le cas. Celui que j'exécute en second 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 passe uniquement du rouge au bleu pour le test. Plus tard, la couleur pourra être choisie par l'utilisateur.
Éditer:
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>
android
android-layout
background
android-view
rounded-corners
John Moffitt
la source
la source
tags_rounded_corners
?Réponses:
Au lieu de
setBackgroundColor
, récupérez l'arrière-plan dessinable et définissez sa couleur:En outre, vous pouvez définir le remplissage dans votre
tags_rounded_corners.xml
:la source
Approche programmatique totale pour définir des coins 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.
Ici, nous utilisons gradient drawable afin que nous puissions utiliser
GradientDrawable#setCornerRadius
carShapeDrawable
NE fournit PAS une telle méthode.la source
PaintDrawable
au lieu deGradientDrawable
. Il prend en charge les coins arrondis et juste une seule couleur qui semble être plus appropriée qu'un dégradé.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Je pense que le moyen le plus rapide d'y parvenir est:
la source
Vous pouvez mieux y parvenir en utilisant DrawableCompat comme ceci:
la source
Si vous n'avez pas d'AVC, vous pouvez utiliser
mais cela changera également la couleur du trait
la source
Voici un exemple utilisant une extension. Cela suppose que la vue a la même largeur et hauteur.
Besoin d'utiliser un écouteur de changement de disposition pour obtenir la taille de la vue. Ensuite, vous pouvez simplement appeler cela sur une vue comme celle-ci
myView.setRoundedBackground(Color.WHITE)
la source
Vous pouvez modifier dynamiquement la couleur de tous les éléments (mise en page, vue de texte). Essayez le code ci-dessous pour définir la couleur par programmation dans la mise en page
dans le fichier activity.java
créer layout_round.xml dans un dossier dessinable
mise en page dans le fichier activity.xml
la source
Copie du commentaire de @ cimlman dans une réponse de premier niveau pour plus de visibilité:
FYI:
ShapeDrawable
(et son sous-type,PaintDrawable
) utilise la largeur intrinsèque par défaut et la hauteur de 0. Si le dessinable n'apparaît pas dans votre cas d'utilisation, vous devrez peut-être définir les dimensions manuellement:-1
est une constante magique qui indique qu'un Drawable n'a pas de largeur et de hauteur intrinsèques qui lui sont propres ( Source ).la source