Mit der neuen Android API ist 22 getResources().getDrawable()
jetzt veraltet. Jetzt ist der beste Ansatz, nur zu verwenden getDrawable()
.
Was hat sich geändert?
Mit der neuen Android API ist 22 getResources().getDrawable()
jetzt veraltet. Jetzt ist der beste Ansatz, nur zu verwenden getDrawable()
.
Was hat sich geändert?
getDrawable (int id)
der KlasseResources
veraltet ist. Sie sollten die Methode jetztgetDrawable (int id, Resources.Theme theme)
mit dem neuen Designparameter verwenden.Resources#getDrawable(int)
undResources#getColor(int)
veraltet waren.Antworten:
Sie haben einige Optionen, um mit dieser Abwertung richtig (und zukunftssicher ) umzugehen, je nachdem, welche Art von Zeichen Sie laden:
A) Drawables mit Thema Attributen
Sie erhalten ein gestaltetes Drawable, wie es in Ihrem Aktivitätsthema angegeben ist. Dies ist wahrscheinlich das, was Sie brauchen.
B) Drawables ohne Thema Attribute
Sie erhalten Ihr ungestyltes Zeichen auf die alte Art und Weise. Bitte beachten Sie:
ResourcesCompat.getDrawable()
ist nicht veraltet!EXTRA) Drawables mit Themenattributen aus einem anderen Thema
quelle
Bearbeiten: Eine ausführlichere Erklärung finden Sie in meinem Blogbeitrag zu diesem Thema
Sie sollten stattdessen den folgenden Code aus der Support-Bibliothek verwenden:
Die Verwendung dieser Methode entspricht dem Aufruf von:
Ab API 21 sollten Sie die
getDrawable(int, Theme)
Methode anstelle von verwendengetDrawable(int)
, da Sie damit ein zeichnbares Objekt abrufen können, das einer bestimmten Ressourcen-ID für die angegebene Bildschirmdichte / das angegebene Thema zugeordnet ist. Das Aufrufen der veraltetengetDrawable(int)
Methode entspricht dem AufrufengetDrawable(int, null)
.quelle
getDrawable (int id)
Methode derContext
Klasse bezieht . Dies entsprichtgetResources().getDrawable(id, getTheme());
der neuen API und verwendet diese auch.getDrawable(int, Resources.Theme)
.Ersetzen Sie diese Zeile:
getResources().getDrawable(R.drawable.your_drawable)
mit
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
BEARBEITEN
ResourcesCompat
ist jetzt auch veraltet. Aber Sie können dies verwenden:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Hierthis
ist der Kontext)Für weitere Details folgen Sie diesem Link: ContextCompat
quelle
ResourcesCompat
veraltet ist. Es sollte gut funktionieren.getResources().getDrawable()
wurde in API Level 22 veraltet. Jetzt müssen wir das Thema hinzufügen:getDrawable (int id, Resources.Theme-Thema) (Hinzugefügt in API-Level 21)
Dies ist ein Beispiel:
Dies ist ein Beispiel für die Validierung für spätere Versionen:
quelle
Build.VERSION_CODES.LOLLIPOP is API 21
, sollte das nicht seinif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
oderif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Keine Ursache. Von unten "Die Methode wurde in API 21 hinzugefügt, aber erst in API 22 veraltet. :)"Sie können verwenden
Das ist Arbeit für mich
quelle
Nur ein Beispiel dafür, wie ich das Problem in einem Array behoben habe, um eine listView zu laden. Ich hoffe, es hilft.
quelle
Versuche dies:
quelle
Wenn Sie auf SDK> 21 (Lollipop oder 5.0) abzielen, verwenden Sie
Siehe Dokumente
quelle
getDrawable (int drawable) ist in API-Level 22 veraltet. Eine Referenz finden Sie unter diesem Link .
Um dieses Problem zu lösen, müssen wir einen neuen Konstruktor mit einer ID wie folgt übergeben: -
Für Lösungen Gehen Sie wie folgt vor: -
In Java: -
oder
In Kotlin: -
oder
Hoffe das wird dir helfen. Danke.
quelle
en api level 14
quelle
Jetzt müssen Sie so implementieren
Das Befolgen einer einzigen Codezeile reicht aus, ContextCompat.getDrawable kümmert sich um alles
quelle
Für einige, die dieses Problem auch nach dem Anwenden des Vorschlags dieses Threads noch lösen müssen (ich war früher einer davon), fügen Sie diese Zeile in Ihre Anwendungsklasse ein, onCreate () -Methode
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Wie hier und hier vorgeschlagen, ist dies manchmal erforderlich, um auf Vektoren aus Ressourcen zuzugreifen, insbesondere wenn Sie mit Menüelementen usw.
quelle
In Kotlin können Sie die Erweiterung verwenden
dann benutze wie
quelle
Build.VERSION_CODES.LOLLIPOP sollte jetzt in BuildVersionCodes.Lollipop geändert werden, dh:
quelle
BuildVersionCodes
eine Klasse nicht spezifisch für Xamarin?