AppCompat 23.2 utilisation VectorDrawableCompat avec RemoteViews (AppWidget) sur l'API<21
J'ai un AppWidget et je voudrais utiliser VectorDrawables, aussi, sur la pré-Sucette appareils.
VectorDrawableCompat ne fonctionnera pas avec le RemoteViews-je créer.
Garder mon app APK de la taille vers le bas, je ne veux pas ajouter d'autres versions PNG de mon un drawable pour les anciennes API plates-formes.
Comment puis-je le faire?
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR 22/10/2017
Comme le fait remarquer @user924 maintenant AppCompatDrawableManager l'accès est restreint à sa propre bibliothèque.
ContextCompat.getDrawable(...) devrait faire l'affaire.
Mise à JOUR 05/09/2016
Comme le fait remarquer @cyrille-koulakov dans sa réponse, les dernières mises à jour de la Bibliothèque de prise en charge limitée de la TintContextWrapper de la visibilité à son propre paquet.
Je suis à jour de ma réponse, pour supprimer le code incorrect, mais s'il vous plaît merci Cyrille pour la correction!
VectorDrawable et RemoteViews pré-Sucette
Vous pouvez éviter d'ajouter alternative pixellisé versions de votre vecteur dessiné ressources
avec un facile hack: utilisation AppCompat TintResources par TintContextWrapperà l'aide de AppCompatDrawableManagerà l'aide de ContextCompat.TintResourcesAppCompatDrawableManagerContextCompat est la classe qui, entre autres choses, sur la pré-Sucette appareils, analyse le VectorDrawables XML des fichiers et de les convertir dans VectorDrawableCompat instances qui peuvent être utilisés tout le chemin vers le bas pour API 7.Puis, une fois que vous avez un VectorDrawableCompat exemple, pixellisation sur une image Bitmap. Vous n'aurez plus tard utiliser cette image bitmap dans une distance ImageView.
Avant de commencer: AppCompat Bibliothèque
Vous assurer que vous utilisez Android Studio 2.0+ et que vous avez configuré votre application
build.gradle
fichier comme suit:Mise à jour de votre AppWidgetProvider
Tout d'abord: ne mettez pas votre vecteur dessiné des ressources à l'intérieur de votre RemoteViews fichier de mise en page (ni
android:src
niapp:srcCompat
de travail). Vous aurez à définir par programmation.À l'intérieur de votre AppWidgetProvider classe et le vecteur de la ressource ou une version pixellisée selon le niveau de l'API:
Références
Bitmap.createBitmap(d.getIntrinsicWidth(), d.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
stackoverflow.com/questions/43710994/...AppCompatDrawableManager can only be called from within the same library group
As noted by @user924 now AppCompatDrawableManager access is restricted to its own library.
a) Qui ne vous empêche pas de fait, l'aide. b) Il y a maintenant API publique dansAppCompatResources.getDrawable(...)
.setImageViewResource
mo de travail pour les < 21 si ajouterAppCompatImageView
(au lieu de ImageView) à dispositionLa méthode suivante vous permet de convertir le
vector drawable
à une image avant, cela devrait faire l'affaire.