Android StateListDrawable из svg-s ниже уровня API 21

Я хотел бы провести рефакторинг своего приложения, используя масштабируемую векторную графику до уровня 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.

Но если я установлюvectorDrawables.useSupportLibrary = true"в моем build.gradle я не могу использовать их ни в 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-ы, которые у меня уже есть. Есть ли у вас какие-либо идеи?

0 ответов

Другие вопросы по тегам