Android支持库:getDrawable是否为vector而不是vector

时间:2016-06-07 16:53:29

标签: java android android-support-library android-vectordrawable android-support-design

使用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+项目?支持库文章未提及执行此迁移的方法

3 个答案:

答案 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)

和上下文应该是您的活动(但不是应用程序上下文)