J'ai une méthode qui définit VectorDrawable comme DrawableLeft, DrawableRight, etc. sur TextView et Button, mais je voudrais le faire fonctionner aussi pour Drawable normal. Donc, existe-t-il un moyen de vérifier le type de DrawableRes, ou devrais-je utiliser try/catch? La méthode ressemble à ceci:Vérifiez si DrawableRes est VectorDrawable
public static void setViewDrawables(@NonNull View view, @DrawableRes int left, @DrawableRes int top, @DrawableRes int right, @DrawableRes int bottom) {
final Resources resources = view.getResources();
Drawable vectorDrawableLeft = left != 0 ? VectorDrawableCompat.create(resources, left, view.getContext().getTheme()) : null;
Drawable vectorDrawableTop = top != 0 ? VectorDrawableCompat.create(resources, top, view.getContext().getTheme()) : null;
Drawable vectorDrawableRight = right != 0 ? VectorDrawableCompat.create(resources, right, view.getContext().getTheme()) : null;
Drawable vectorDrawableBottom = bottom != 0 ? VectorDrawableCompat.create(resources, bottom, view.getContext().getTheme()) : null;
if (view instanceof Button) {
((Button) view).setCompoundDrawablesWithIntrinsicBounds(vectorDrawableLeft, vectorDrawableTop, vectorDrawableRight, vectorDrawableBottom);
}
else if (view instanceof TextView) {
((TextView) view).setCompoundDrawablesWithIntrinsicBounds(vectorDrawableLeft, vectorDrawableTop, vectorDrawableRight, vectorDrawableBottom);
} else {
Log.e("ERROR: ViewUtils", "Can't do setCompoundDrawablesWithIntrinsicBounds on " + view.getClass().getName());
}
}
si vous voulez '' android.support.v7.content.res.AppCompatResources ? – pskink
Ça marche. Merci! Je viens de remplacer 'VectorDrawableCompat.create (resources, left, view.getContext(). GetTheme())' avec AppCompatResources.getDrawable (view.getContext(), à gauche) '. –
il ya aussi 'android.support.v4.content.res.ResourcesCompat ' mais je ne sais pas si cela fonctionne aussi bien, vous pouvez le vérifier ... – pskink