来自svg-s的Android StateListDrawable低于API等级21

时间:2016-08-09 15:04:09

标签: android svg android-support-library android-4.4-kitkat statelistdrawable

我想在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。你有什么想法?

0 个答案:

没有答案