AppCompat 23.2 verwendet VectorDrawableCompat mit RemoteViews (AppWidget) auf API & lt; 21
Ich habe eine AppWidget, und ich möchte zu verwenden VectorDrawables in es auch auf pre-Lollipop-Geräte.
VectorDrawableCompat funktioniert nicht mit der RemoteViews ich schaffen.
Halten meine app APK Größe nach unten, ich will nicht hinzufügen, alternative PNG-Versionen meiner drawables für ältere API-Plattformen.
Wie kann ich das tun?
InformationsquelleAutor der Frage araks | 2016-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
UPDATE 22/10/2017
Wie bereits von @user924 jetzt AppCompatDrawableManager Zugang ist beschränkt auf Ihre eigene Bibliothek.
ContextCompat.getDrawable(...) sollte den trick tun.
UPDATE 05/09/2016
Wie bereits von @kirill-kulakov in seiner Antwort, die neuesten updates von der Bibliothek Unterstützt eingeschränkt die TintContextWrapper Sichtbarkeit seiner eigenen Paket.
Ich aktualisiere meine Antwort zu löschen, die den falschen code, aber bitte danken Kirill für die Korrektur!
VectorDrawable und RemoteViews pre-Lollipop
Können Sie vermeiden, hinzufügen von alternativen gerasterte Versionen von Vektor-drawable-Ressourcen
mit einem einfachen hack: verwenden Sie AppCompat TintResources durch TintContextWrapperAppCompatDrawableManagerContextCompat.TintResourcesAppCompatDrawableManagerContextCompat ist die Klasse, die unter anderem auf pre-Lollipop-Geräte, analysiert den VectorDrawables XML-Dateien und konvertieren Sie Sie in VectorDrawableCompat - Instanzen, die verwendet werden können, den ganzen Weg nach API 7.Dann, wenn Sie über ein VectorDrawableCompat Instanz, in ein Pixelbild umwandeln in ein Bitmap. Sie werden später verwenden Sie diese bitmap in einem abgelegenen Bildansicht.
Bevor wir beginnen: AppCompat-Bibliothek
Sicherstellen, dass Sie mit Android Studio 2.0+ und konfiguriert Ihre app
build.gradle
- Datei wie folgt:Aktualisieren Sie Ihre AppWidgetProvider
Erstens: nicht gesetzt, Ihre vector drawable Ressourcen in Ihre RemoteViews layout-Datei (weder
android:src
nochapp:srcCompat
funktionieren wird). Sie haben, um Sie programmgesteuert.In Ihrem AppWidgetProvider Klasse set das Vektor-Ressource oder einer gerasterten version abhängig von der API-Ebene:
Referenzen
InformationsquelleAutor der Antwort araks
Die folgende Methode wandelt die
vector drawable
als bitmap vor, dies sollte den trick tun.InformationsquelleAutor der Antwort Kirill Kulakov