安卓支持库:无论是否是矢量,都可以独立获取

当使用安卓>= 5.0时,

Drawable d = getResources().getDrawable(R.drawable.icon)

正确分析 XML 并返回有效的可绘制对象。但是,当使用新的 Vector Drawable 支持库(版本 23.4,Gradle 2.1.2)时,此代码在 Android 4 下崩溃

android.content.res.Resources$NotFoundException

...

原因:org.xmlpull.v1.XmlPullParserException: Binary XML 文件行 #2: 无效的可绘制标记向量

解决方案是使用

Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);

但是,如果资源不是矢量资源,则会崩溃:

java.io.FileNotFoundException: 损坏的 XML 二进制文件

那么必须使用什么代码来代替第一行,以便它与Android 4和Android 6以及矢量和非矢量可绘制对象一起使用 - 例如,在所有情况下,这行都用于Android 5.0 +项目?支持库文章未提及执行此迁移的方法


答案 1

您可以使用以下方法在 5.0 之前的版本中获取矢量可绘制对象的可绘制性。

Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);

答案 2

我找到了解决方案。

您需要手动在活动中添加支持VectorDrawable。

在你的活动中尝试这个:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

您应该查看此博客文章以获取更多信息。


推荐