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-ы, которые у меня уже есть. Есть ли у вас какие-либо идеи?