Android 支持库:getDrawable 独立于矢量或非矢量
Android Support Library: getDrawable independent if vector or not
使用 Android >= 5.0 时,
Drawable d = getResources().getDrawable(R.drawable.icon)
正确解析 XML 和 returns 一个有效的可绘制对象。但是当使用新的 Vector Drawable Support Library(版本 23.4,Gradle 2.1.2)时,此代码 在 Android 4.
下崩溃
android.content.res.Resources$NotFoundException
...
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector
解决方案是使用
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
但是如果资源不是矢量资源,这会崩溃:
java.io.FileNotFoundException: Corrupt XML binary file
那么必须使用什么代码来代替第一行,以便它与 Android 4 和 Android 6 以及矢量和非矢量绘图一起工作 - 例如在所有情况下,这条线都用于 Android 5.0+ 项目?支持库文章没有提到执行此迁移的方法
我找到了解决方案。
您需要在 activity 中手动添加对 VectorDrawable 的支持。
在您的 activity 中试试这个:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
您应该查看此 blog entry 了解更多信息。
5.0之前的Vector Drawable可以使用以下方法获取drawable
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
目前我发现的另一种可能的解决方案
ResourcesCompat.getDrawable(context.resources, resId, theme)
上下文应该是您的 activity(但不是应用程序上下文)
使用 Android >= 5.0 时,
Drawable d = getResources().getDrawable(R.drawable.icon)
正确解析 XML 和 returns 一个有效的可绘制对象。但是当使用新的 Vector Drawable Support Library(版本 23.4,Gradle 2.1.2)时,此代码 在 Android 4.
下崩溃android.content.res.Resources$NotFoundException
...
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector
解决方案是使用
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
但是如果资源不是矢量资源,这会崩溃:
java.io.FileNotFoundException: Corrupt XML binary file
那么必须使用什么代码来代替第一行,以便它与 Android 4 和 Android 6 以及矢量和非矢量绘图一起工作 - 例如在所有情况下,这条线都用于 Android 5.0+ 项目?支持库文章没有提到执行此迁移的方法
我找到了解决方案。
您需要在 activity 中手动添加对 VectorDrawable 的支持。
在您的 activity 中试试这个:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
您应该查看此 blog entry 了解更多信息。
5.0之前的Vector Drawable可以使用以下方法获取drawable
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
目前我发现的另一种可能的解决方案
ResourcesCompat.getDrawable(context.resources, resId, theme)
上下文应该是您的 activity(但不是应用程序上下文)