资源可用时出现 ResourcesNotFoundException(API 22 和 23 设备)

ano*_*dha 2 svg android exception drawable

我仅在 API 22 和 23 设备上遇到此崩溃。

(android.content.res.Resources$NotFoundException:来自可绘制资源 ID #0x7f080156 的文件 res/drawable/show_empty_state.xml 在 android.content.res.Resources.loadDrawableForCookie(Resources.java:2640) 在 android.content.res.Resources .loadDrawable(Resources.java:2540) 在 android.content.res.Resources.getDrawable(Resources.java:806) 在 android.content.Context.getDrawable(Context.java:458) 在 android.support.v4.content。 ContextCompat.getDrawable(ContextCompat.java:358)在com.myProj.utils.EmptyStateView.setImage(EmptyStateView.java:55)在com.myProj.tab_two.ShowFragment.onCreateView(ShowFragment.java:111)在android.support.v4 .app.Fragment.performCreateView(Fragment.java:2261)

该资源肯定存在,并且在更高的设备上运行良好。我最近所做的唯一更改是使用 SVG 替换新的矢量图像作为 show_empty_state。我确实查看了其他一些相关问题。至今未能找到答案。任何帮助表示赞赏。谢谢。

ano*_*dha 6

崩溃是因为矢量资产具有gradient<24 个设备的标签。

android:fillColor
指定用于填充路径的颜色。可能是颜色,或者对于 SDK 24+,颜色状态列表或渐变颜色(请参阅 GradientColor 和 GradientColorItem)。如果此属性是动画的,则动画设置的任何值都将覆盖原始值。如果未指定此属性,则不会绘制路径填充。

更换

<gradient android:endX="45300.0" android:endY="-86698.0"
       <android:startX="45300.0" android:startY="-3118.0" android:type="linear">
       <item android:color="#FF1AA186" android:offset="0.0"/>
       <item android:color="#FF23B899" android:offset="1.0"/>
 </gradient>
Run Code Online (Sandbox Code Playgroud)

android:fillColor="#FF1AA186"
Run Code Online (Sandbox Code Playgroud)

修复它。

更好的方法是使用 <24 sdk 的非梯度资源替换该资源。

  • 这次真是万分感谢。我到处尝试了所有其他 srcCompat 和其他 compat gradle 选项,但这是唯一真正对我有用的东西。 (2认同)