Ich habe ein Bild res/drawable/test.png
(R.drawable.test).
Ich möchte dieses Bild an eine Funktion übergeben, die akzeptiert Drawable
z.B mButton.setCompoundDrawables()
.
Wie kann ich also eine Bildressource in eine Drawable
?
Benutzer7723337
Ich habe ein Bild res/drawable/test.png
(R.drawable.test).
Ich möchte dieses Bild an eine Funktion übergeben, die akzeptiert Drawable
z.B mButton.setCompoundDrawables()
.
Wie kann ich also eine Bildressource in eine Drawable
?
Jems
Ihre Aktivität sollte die Methode getResources haben. Tun:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Ab API-Version 21 ist diese Methode veraltet und kann ersetzt werden durch:
Drawable myIcon = AppCompatResources.getDrawable(context, R.drawable.icon);
Wenn Sie ein benutzerdefiniertes Design angeben müssen, wird es wie folgt angewendet, aber nur, wenn die API Version 21 oder höher ist:
Drawable myIcon = ResourcesCompat.getDrawable(getResources(), R.drawable.icon, theme);
Wenn Sie dies außerhalb einer Aktivitätsklasse möchten, müssen Sie einen anderen Weg finden, um den Kontext zu erreichen, in dem sich getResources() befindet. Diese Antwort empfiehlt, sie an den Konstruktor zu übergeben
– Rymo
30. Juni 2014 um 20:39 Uhr
Ab API-Version 21 ist diese Methode veraltet und sollte ersetzt werden durch: Drawable drawable = ResourcesCompat.getDrawable(getResources(), page.getImageId(), null);
– Langweilig
14. April 2015 um 23:07 Uhr
@Boren ist es dasselbe wie die Verwendung von ContextCompat.getDrawable (this, R.drawable.icon);?
– Zach
1. September 2016 um 17:57 Uhr
Keiner der obigen Vorschläge scheint zu funktionieren, wenn R.drawable.icon ein Vector drawable ist.
– FractalBob
29. Mai 2017 um 22:57 Uhr
VERWENDEN SIE DIES NICHT, WENN SIE VECTOR DRAWABLE VERWENDEN. Verwenden Sie stattdessen AppCompatResources.getDrawable(context, R.drawable.icon ).
– Dhaval Patel
3. Oktober 2018 um 4:37 Uhr
Daniel Kilinskas
Dieser Code ist veraltet:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Verwenden Sie stattdessen Folgendes:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
Beachten Sie, dass dies das Thema aus dem gegebenen Kontext anwenden wird. Wenn Sie sicherstellen möchten, dass kein Design verwendet wird, können Sie verwenden ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(wobei der 3. Param eine optionale Theme-Instanz ist).
– vaughandroid
31. März 2016 um 7:18 Uhr
Chris Stillwell
Das getDrawable (int id)
-Methode ist ab API 22 veraltet.
Stattdessen sollten Sie die verwenden getDrawable (int id, Resources.Theme theme)
für API 21+
Code würde in etwa so aussehen.
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
Warum nicht für jede API null übergeben? Plus: Sind Sie sicher, dass null die beste Option ist?
– jonathanrz
15. Mai 2015 um 13:20 Uhr
Das getDrawable(int id, Resources.Theme-Design) wurde erst mit API 21 entwickelt.
– Chris Stillwell
15. Mai 2015 um 14:43 Uhr
oder getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
– Simon Federstein
19. November 2018 um 15:48 Uhr
Sameer Khanal
Ich möchte nur hinzufügen, dass Sie stattdessen die folgende Methode aus der Support-Bibliothek verwenden sollten, wenn Sie bei der Verwendung von getDrawable (…) die Meldung “veraltet” erhalten.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Sie müssen getResources() nicht verwenden, wenn Sie diese Methode verwenden.
Dies ist gleichbedeutend mit etwas wie
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
Dies funktioniert sowohl in Pre- als auch in Post-Lollipop-Versionen.
Holen Sie sich Drawable von der Vektorressource, unabhängig davon, ob es sich um einen Vektor handelt oder nicht:
AppCompatResources.getDrawable(context, R.drawable.icon);
Notiz:
ContextCompat.getDrawable(context, R.drawable.icon);
wird herstellen android.content.res.Resources$NotFoundException
für Vektorressource.
Hervorragende Antwort!!
– Jim Andreas
18. September 2020 um 8:18 Uhr
Wenn Sie versuchen, das Drawable aus der Ansicht zu erhalten, in der das Bild festgelegt ist,
ivshowing.setBackgroundResource(R.drawable.one);
dann gibt das Drawable mit dem folgenden Code nur einen Nullwert zurück …
Drawable drawable = (Drawable) ivshowing.getDrawable();
Es ist also besser, das Bild mit dem folgenden Code festzulegen, wenn Sie das Drawable aus einer bestimmten Ansicht abrufen möchten.
ivshowing.setImageResource(R.drawable.one);
erst dann wird das abziehbare genau umgerechnet.
Hervorragende Antwort!!
– Jim Andreas
18. September 2020 um 8:18 Uhr
vorwerg-ni
Wenn Sie von einem Fragment erben, können Sie Folgendes tun:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)
Das hat bei mir funktioniert, nach dem Vorschlag von Android Studio wird es in requireActivity()!!.getDrawable(R.drawable.id) konvertiert.
– erhun
28. Juli 2020 um 7:36 Uhr