it-swarm.com.de

getColorStateList wurde nicht mehr empfohlen

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

18
fkchaud

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.

23
anthonycr

Während die Antwort von anthonycr funktioniert, ist es viel kompakter, nur zu schreiben 

ContextCompat.getColorStateList(context, R.color.haml_Indigo_blue);
41
user1354603

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;
} 
0
Vahe Gharibyan

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)
0
saravanan