it-swarm.com.de

Android: Alternative für context.getDrawable ()

Ich habe context.getDrawable() so in meinem Projekt verwendet:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

Aber Eclipse gibt mir einen Fehler, dass es einen Minimum API level of 21 benötigt. Dies würde bedeuten, dass meine APP nach einer schnellen Google-Suche nur für Android 5.0 verwendet werden kann. Da nicht alle Geräte diese Version von Android verwenden, hätte ich gerne eine Alternative für context.getDrawable().

67
Bram

Die zuvor akzeptierte Methode wurde gemäß der SDK 22-Dokumentation als veraltet eingestuft: 

Vor Android.os.Build.VERSION_CODES # JELLY_BEAN ruft diese Funktion die endgültige Konfigurationsdichte nicht korrekt ab, wenn die übergebene Ressourcen-ID ein Alias ​​für eine andere Drawable-Ressource ist. Das heißt, wenn die Dichte-Konfiguration der Alias-Ressource von der tatsächlichen Ressource abweicht, wäre die Dichte des zurückgegebenen Drawable falsch, was zu einer schlechten Skalierung führt.

Wie in dieser Antwort hervorgehoben, wäre die bessere Lösung die Verwendung von ContextCompat : ContextCompat.getDrawable(context, R.drawable.***).

174
user2417480

Fügen Sie nach dem Kontext eine getResources() hinzu.

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

sollte arbeiten.

23
glm9637

Ich hatte die gleiche Situation, auf die ich die getDrawable () - Methode verweisen wollte, die jetzt veraltet ist.

was ich benutzt habe,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

Hoffe, das wird dir helfen

9
Umanda

Ich hatte vorher ein ähnliches Problem. Hast du versucht, es so zu machen?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);
8
user4423334

Sie sollten "getDrawable (id, this.getTheme ())" verwenden. Diese Methode ist bisher nicht veraltet.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}
0
Maulik Baraiya

Ich bin damit einverstanden, ContextCompact.getDrawable (Context context, int resID) zu verwenden. Es hat für mich und meine App-Ziele API 19 funktioniert.