我想在API级别21之前使用可缩放矢量图形重构我的应用程序(这可能是因为支持库23.2,这是一个很酷的工作人员),而不是生成png-s。 我唯一的问题是,我无法使用StateListDrawables。在重构之前,我使用了StateListDrawables,如:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/dashboard_reset_max_alt_disabled" />
<item android:state_pressed="true" android:drawable="@drawable/dashboard_reset_max_alt_pressed"/>
<item android:drawable="@drawable/dashboard_reset_max_alt"/>
</selector>
其中“dashboard_reset_max_alt*
”是svg-s。
但是如果我在build.gradle中设置“vectorDrawables.useSupportLibrary = true
”,我就无法在app:srcCompat
属性和getDrawable()
方法中使用它们。你知道一个解决方案来使用我已经拥有的xml文件和svg-s吗?
崩溃日志:
android.content.res.Resources$NotFoundException: File res/drawable/computer_cog_20dp.xml from drawable resource ID #0x7f02016c
at android.content.res.Resources.loadDrawable(Resources.java:3063)
at android.content.res.Resources.getDrawable(Resources.java:1624)
at com.myapp.helper.SkinHelper.getDrawable(SkinHelper.java:426)
...
getDrawable方法如下所示:
Drawable d;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
d = c.getDrawable(resId);
else d = c.getResources().getDrawable(resId);
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
return DrawableCompat.wrap(d);
我知道我可以通过编程方式创建StateListDrawables,但我更喜欢一种解决方法,所以我可以使用我已经的xml-s。你有什么想法?