使用Android> = 5.0时,
Drawable d = getResources().getDrawable(R.drawable.icon)
正确解析XML并返回有效的drawable。但是当使用新的Vector Drawable Support Library(版本23.4,Gradle 2.1.2)时,此代码在Android 4下崩溃。
android.content.res.Resources $ NotFoundException
...
引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#2:无效的可绘制标记向量
解决方案是使用
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
但如果资源不是矢量资源,则会崩溃:
java.io.FileNotFoundException:损坏的XML二进制文件
那么必须使用什么代码而不是第一行,以便它可以与Android 4和Android 6以及矢量和非矢量绘图一起使用 - 例如在所有情况下,这条线都用于Android 5.0+项目?支持库文章未提及执行此迁移的方法
答案 0 :(得分:38)
您可以使用以下方法在5.0之前获得Vector Drawable的绘图。
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
答案 1 :(得分:6)
我找到了解决方案。
您需要手动在活动中添加支持VectorDrawable。
在您的活动中尝试此操作:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
您应该查看此blog entry以获取更多信息。
答案 2 :(得分:1)
到目前为止我找到的另一种可能的解决方案
ResourcesCompat.getDrawable(context.resources, resId, theme)
和上下文应该是您的活动(但不是应用程序上下文)