Wie erhalten Sie ein Drawable-Objekt von einer Ressourcen-ID im Android-Paket?

Lesezeit: 3 Minuten

Benutzer-Avatar
Blaskovicz

Ich muss ein Drawable-Objekt erhalten, das auf einer Bildschaltfläche angezeigt wird. Gibt es eine Möglichkeit, den folgenden Code (oder etwas Ähnliches) zu verwenden, um ein Objekt aus dem android.R.drawable.*-Paket zu erhalten?

zum Beispiel, wenn drawableId android.R.drawable.ic_delete war

mContext.getResources().getDrawable(drawableId)

Benutzer-Avatar
Peter Houston

Drawable d = getResources().getDrawable(android.R.drawable.ic_dialog_email);
ImageView image = (ImageView)findViewById(R.id.image);
image.setImageDrawable(d);

  • Ich habe auch festgestellt, dass die Verwendung des Anwendungskontexts zu funktionieren scheint, danke.

    – Blaskovicz

    19. Oktober 2011 um 2:21 Uhr

  • Ab API 22. getDrawable(int id) ist veraltet. Verwenden getDrawable(int id, Resources.Theme theme) stattdessen. Die Methode getTheme() sollte hilfreich sein.

    – Isaac Zais

    17. April 2015 um 18:07 Uhr


  • Ich habe einen kleinen Zweifel. In diesem Code “Die Methode getDrawable (int) vom Typ Resources ist veraltet”. Laut einer SO-Antwort 1. Ist es falsch, veraltete Methoden oder Klassen in Java zu verwenden? Aus der Definition von veraltet: “Ein Programmelement mit der Anmerkung @Deprecated ist eines, von dessen Verwendung Programmierer abgeraten werden, typischerweise weil es gefährlich ist oder weil es eine bessere Alternative gibt.” Was ist eine bessere Alternative dafür.

    – Shubham Agarwal

    5. August 2015 um 13:42 Uhr

Benutzer-Avatar
Muhammad Soliman

Ab API21sollten Sie die verwenden getDrawable(int, Theme) Methode statt getDrawable(int)da Sie damit a abrufen können drawable Objekt, das einem bestimmten zugeordnet ist resource ID für das Gegebene screen density/theme. Aufruf der deprecated getDrawable(int) Methode ist äquivalent zum Aufrufen getDrawable(int, null).

Sie sollten stattdessen den folgenden Code aus der Support-Bibliothek verwenden:

ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)

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);
}

  • context.getDrawable(id); scheint gleichwertig zu sein resources.getDrawable(id, context.getTheme());

    – Erik Bergmann

    7. März 2017 um 2:46 Uhr


  • Dies kann in einer Zeile erfolgen, wenn Sie die Support-Bibliothek haben: ResourcesCompat.getDrawable(resources, id, context.getTheme());

    – k2col

    13. Juli 2017 um 13:47 Uhr

Ab API 21 können Sie auch Folgendes verwenden:

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

Anstatt von ContextCompat.getDrawable(context, android.R.drawable.ic_dialog_email)

  • Könnten Sie bitte die Auswahl näher erläutern

    – Nandika

    4. April 2018 um 8:31 Uhr

Benutzer-Avatar
Sanjayrajsinh

Ab API 21 ist `getDrawable(int id)` veraltet

Also müssen Sie jetzt verwenden

ResourcesCompat.getDrawable(context.getResources(), R.drawable.img_user, null)

Aber der beste Weg ist:

– Sie sollten eine gemeinsame Klasse erstellen, um Zeichenfähigkeit und Farben zu erhalten, denn wenn Sie in Zukunft eine Verwerfung haben, müssen Sie nicht überall in Ihrem Projekt Änderungen vornehmen. Sie ändern einfach diese Methode

import android.content.Context
import android.graphics.drawable.Drawable
import androidx.core.content.res.ResourcesCompat

object ResourceUtils {
    fun getColor(context: Context, color: Int): Int {
        return ResourcesCompat.getColor(context.resources, color, null)
    }

    fun getDrawable(context: Context, drawable: Int): Drawable? {
        return ResourcesCompat.getDrawable(context.resources, drawable, null)
    }
}

Verwenden Sie diese Methode wie:

Drawable img=ResourceUtils.getDrawable(context, R.drawable.img_user)
image.setImageDrawable(img);

Benutzer-Avatar
Inzimam Tariq IT

Der beste Weg ist

 button.setBackgroundResource(android.R.drawable.ic_delete);

ODER Verwenden Sie den folgenden Code für Drawable links, oben, rechts, unten. Ich setze in diesem Fall drawable left.

int imgResource = R.drawable.left_img;
button.setCompoundDrawablesWithIntrinsicBounds(imgResource, 0, 0, 0);

und

getResources().getDrawable() ist jetzt veraltet

Benutzer-Avatar
Jens van de Mötter

Nach einer Lösung für Kotlin-Programmierer (ab API 22)

val res = context?.let { ContextCompat.getDrawable(it, R.id.any_resource }

1345690cookie-checkWie erhalten Sie ein Drawable-Objekt von einer Ressourcen-ID im Android-Paket?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy