TextViewとButtonにVectorDrawableをDrawableLeft、DrawableRightなどに設定するメソッドがありますが、通常のDrawableでも同じようにしたいと思います。ですから、DrawableResの型をチェックする方法はありますか?またはtry/catchを使うべきですか? この方法は次のようになります。DrawableResが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());
}
}
ので、あなたは 'android.support.v7.content.res.AppCompatResources 'たい:それはこのようになりますか? – pskink
それは働いています。ありがとう!私はちょうど 'AppCompatResources.getDrawable(view.getContext()、left)'で 'VectorDrawableCompat.create(resources、left、view.getContext()。getTheme())'を置き換えました。 –
また、 'android.support.v4.content.res.ResourcesCompat 'もありますが、それがうまくいくかどうかは分かりませんが、あなたはそれをチェックすることができます... – pskink