J'ai un problème ici. Je viens de mettre à jour de sdk 22 à 23 et la version précédente de "getColorStateList ()" est obsolète.
Mon code était comme ça
seekBar.setProgressTintList(getResources().getColorStateList(R.color.bar_green));
valorslide.setTextColor(getResources().getColorStateList(R.color.text_green));
L'ancien "getColorStateList" était
getColorStateList(int id)
Et le nouveau est
getColorStateList(int id, Resources.Theme theme)
Comment utiliser la variable thème? Merci d'avance
L'objet Thème est le thème utilisé pour styliser la liste d'états de couleurs. Si vous n'utilisez pas de thèmes spéciaux avec des ressources individuelles, vous pouvez transmettre null
ou le thème actuel comme suit:
TextView valorslide; // initialize
SeekBar seekBar; // initialize
Context context = this;
Resources resources = context.getResources();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
seekBar.setProgressTintList(resources.getColorStateList(R.color.bar_green, context.getTheme()));
valorslide.setTextColor(resources.getColorStateList(R.color.text_green, context.getTheme()));
} else {
seekBar.setProgressTintList(resources.getColorStateList(R.color.bar_green));
valorslide.setTextColor(resources.getColorStateList(R.color.text_green));
}
Si vous ne vous souciez pas du thème, vous pouvez simplement passer null:
getColorStateList(R.color.text_green, null)
Voir la documentation pour plus d'explications. Remarque, vous devez uniquement utiliser la nouvelle version sur l’API 23 (Android Marshmallow) et les versions ultérieures.
Bien que la réponse d’anthonycr fonctionne, il est beaucoup plus compact de simplement écrire
ContextCompat.getColorStateList(context, R.color.haml_Indigo_blue);
Exactement si vous les utilisez, vous perdrez tous les styles. Pour une version plus ancienne, vous devez créer ColorStateList
de manière dynamique, c’est la principale chance de conserver vos styles.
cela fonctionne pour toutes les versions
layout.setColorStateList(buildColorStateList(this,
R.attr.colorPrimaryDark, R.attr.colorPrimary)
);
public ColorStateList buildColorStateList(Context context, @AttrRes int pressedColorAttr, @AttrRes int defaultColorAttr){
int pressedColor = getColorByAttr(context, pressedColorAttr);
int defaultColor = getColorByAttr(context, defaultColorAttr);
return new ColorStateList(
new int[][]{
new int[]{Android.R.attr.state_pressed},
new int[]{} // this should be empty to make default color as we want
}, new int[]{
pressedColor,
defaultColor
}
);
}
@ColorInt
public static int getColorByAttr(Context context, @AttrRes int attrColor){
if (context == null || context.getTheme() == null)
return -1;
Resources.Theme theme = context.getTheme();
TypedValue typedValue = new TypedValue();
theme.resolveAttribute(attrColor, typedValue,true);
return typedValue.data;
}
Vous devez utiliser ContextCompat.getColor (), qui fait partie de la bibliothèque Support V4 (pour que cela fonctionne pour toutes les API précédentes).
ContextCompat.getColor(context, R.color.my_color)