Ich habe hier ein Problem. Ich habe gerade von Sdk 22 auf 23 aktualisiert, und die vorherige Version von "getColorStateList ()" wurde veraltet.
Mein Code war so
seekBar.setProgressTintList(getResources().getColorStateList(R.color.bar_green));
valorslide.setTextColor(getResources().getColorStateList(R.color.text_green));
Die ältere "getColorStateList" war
getColorStateList(int id)
Und neu ist es
getColorStateList(int id, Resources.Theme theme)
Wie verwende ich die Theme-Variable? Danke im Voraus
Das Designobjekt ist das Design, mit dem die Farbstatusliste formatiert wird. Wenn Sie keine speziellen Themen mit individuellen Ressourcen verwenden, können Sie entweder null
oder das aktuelle Thema wie folgt übergeben:
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));
}
Wenn Sie sich nicht für das Thema interessieren, können Sie einfach null übergeben:
getColorStateList(R.color.text_green, null)
Weitere Informationen finden Sie in der Dokumentation. Beachten Sie, Sie müssen nur die neue Version für API 23 (Android Marshmallow) und höher verwenden.
Während die Antwort von anthonycr funktioniert, ist es viel kompakter, nur zu schreiben
ContextCompat.getColorStateList(context, R.color.haml_Indigo_blue);
Genau wenn Sie sie verwenden, werden Sie alle Stile verlieren. Für eine ältere Version sollten Sie ColorStateList
dynamisch erstellen. Dies ist die beste Gelegenheit, um Ihre Stile beizubehalten.
das funktioniert für alle Versionen
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;
}
Sie müssen ContextCompat.getColor () verwenden, das Teil der Support-V4-Bibliothek ist (damit es für alle vorherigen API funktioniert).
ContextCompat.getColor(context, R.color.my_color)