it-swarm.com.de

Android getResources (). GetDrawable () veraltete API 22

Mit der neuen Android API 22 getResources().getDrawable() ist jetzt veraltet. Der beste Ansatz besteht nun darin, nur getDrawable() zu verwenden.

Was hat sich geändert?

650
Blodhgard

Sie haben einige Möglichkeiten, um mit dieser Abwertung richtig umzugehen (und zukunftssicher), je nachdem, welche Art von Grafik Sie laden:


A) Drawables mit Theme-Attributen

ContextCompat.getDrawable(getActivity(), R.drawable.name);

Sie erhalten ein gestyltes Drawable, wie es von Ihrem Activity-Thema vorgegeben wird. Das ist wahrscheinlich was Sie brauchen.


B) Drawables ohne Theme-Attribute

ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);

Du bekommst dein Unstyled Drawable auf die alte Art und Weise. Bitte beachten Sie: ResourcesCompat.getDrawable() ist nicht veraltet!


EXTRA) Drawables mit Theme-Attributen von einem anderen Thema

ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
931
araks

Bearbeiten: Siehe mein Blog-Beitrag zum Thema für eine ausführlichere Erklärung


Verwenden Sie stattdessen den folgenden Code aus der Supportbibliothek:

ContextCompat.getDrawable(context, R.drawable.***)

Die Verwendung dieser Methode entspricht dem Aufruf von:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

Ab API 21 sollten Sie die getDrawable(int, Theme) -Methode anstelle von getDrawable(int) verwenden, da Sie ein mit einer bestimmten Ressourcen-ID verknüpftes Zeichenobjekt für die angegebene Bildschirmdichte/das angegebene Thema abrufen können. Das Aufrufen der veralteten Methode getDrawable(int) entspricht dem Aufrufen von getDrawable(int, null).

734
Alex Lockwood

Ersetzen Sie diese Zeile: getResources().getDrawable(R.drawable.your_drawable)

mit ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)

BEARBEITEN

ResourcesCompat ist jetzt ebenfalls veraltet. Aber Sie können dies verwenden:

ContextCompat.getDrawable(this, R.drawable.your_drawable) (Hier this ist der Kontext)

für weitere Informationen folgen Sie diesem Link: ContextCompat

140
vincent091

getResources().getDrawable() wurde in API-Ebene 22 verworfen. Nun müssen wir das Thema hinzufügen:

getDrawable (int id, Resources.Theme theme) (Hinzugefügt in API Level 21)

Dies ist ein Beispiel:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));

Dies ist ein Beispiel für die Validierung für spätere Versionen:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) { //>= API 21
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
   } else { 
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
27
Jorgesys

Sie können verwenden

ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);

das ist Arbeit für mich

2
Dasser Basyouni

Versuche dies:

public static List<ProductActivity> getCatalog(Resources res){
    if(catalog == null) {
        catalog.add(new Product("Dead or Alive", res
                .getDrawable(R.drawable.product_salmon),
                "Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
        catalog.add(new Product("Switch", res
                .getDrawable(R.drawable.switchbook),
                "Switch by Chip Heath and Dan Heath", 24.99));
        catalog.add(new Product("Watchmen", res
                .getDrawable(R.drawable.watchmen),
                "Watchmen by Alan Moore and Dave Gibbons", 14.99));
    }
}
1

Nur ein Beispiel, wie ich das Problem in einem Array behoben habe, um eine ListView zu laden. Ich hoffe, es hilft.

 mItems = new ArrayList<ListViewItem>();
//    Resources resources = getResources();

//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
//    mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
    mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
1
Jay

Jetzt müssen Sie so implementieren

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) { //>= API 21
        //
    } else {
        //
    }

Das Befolgen einer einzigen Codezeile reicht aus, alles wird von ContextCompat.getDrawable erledigt

ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
0
Farid Haq

Build.VERSION_CODES.Lollipop sollte jetzt in BuildVersionCodes.Lollipop geändert werden, d. H .:

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
    this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
0
Ryan Herman

Wenn Sie auf SDK> 21 (Lollipop oder 5.0) abzielen, verwenden Sie

context.getDrawable(R.drawable.your_drawable_name)

Siehe Dokumentation

0
Adeel Ahmad

en api level 14

marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
0