【发布时间】:2016-10-07 16:36:33
【问题描述】:
使用 Android >= 5.0 时,
Drawable d = getResources().getDrawable(R.drawable.icon)
正确解析 XML 并返回有效的可绘制对象。但是当使用新的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+ 项目?支持库文章未提及执行此迁移的方法
【问题讨论】:
-
我假设他们希望开发人员预先知道资源是否是可绘制的矢量。这对应用程序开发人员来说是合理的,但对库开发人员来说则不然。即兴发挥,我会尝试
VectorDrawableCompat,如果你得到FileNotFoundException,我会回退到getDrawable()。
标签: java android android-support-library android-vectordrawable android-support-design