Я использовал векторный селектор, который можно рисовать в xml, который работает хорошо, но дает сбой в коде Java, когда sdk <21.

Вот мое использование xml:

<android.support.v7.widget.AppCompatTextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/common_selector_ic_back"/>

< Сильный > common_selecor_ic_back.xml

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/common_ic_back" />
</selector>

< Сильный > common_ic_back.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
<path
    android:fillColor="#FFFFFFFF"
    android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>

Но я хочу изменить drawableLeft в коде, я пробовал три решения, оба не увенчались успехом.

< Сильный > 1

Drawable d1 = getResources().getDrawable(R.drawable.common_selector_ic_back);

произошел сбой

android.content.res.Resources $ NotFoundException: файл res / drawable / common_selector_ic_back.xml из идентификатора вытягиваемого ресурса

0x7f080065

< Сильный > 2

icon2 = AppCompatResources.getDrawable(this, R.drawable.common_selector_ic_back);

не удалось по той же причине

< Сильный > 3

VectorDrawableCompat.create(context.getResources(), R.drawable.common_selector_ic_back, context.getTheme());

ошибка журнала

Для тега строки # 2 двоичного файла XML требуется viewportWidth> 0

Кто-нибудь встретит проблему? Не могли бы вы рассказать мне, как сделать селектор векторов доступным для аппаратного кода?

< Сильный > Решение:

Активность должна быть AppCompatActivity

0
Jamling Li 23 Окт 2018 в 12:30

2 ответа

Лучший ответ

Измените действие, чтобы расширить AppCompatActivity

0
Jamling Li 24 Окт 2018 в 01:38

Решение . Попробуйте выполнить следующие действия:

Сначала добавьте эту строку в свой common_ic_back.xml

<vector
    ...
    android:tintMode="multiply"
    ...>

    ......
    ......

</vector>

Затем не забудьте добавить build.gradle(Module:app), иначе этот подход не будет работать в старых версиях Android.

defaultConfig {
    ....
    vectorDrawables.useSupportLibrary = true
    ....
}

Наконец, добавьте это в свой класс activity перед onCreate(), где вы используете этот вектор:

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

Попытайся. Надеюсь, поможет. Прокомментируйте, если есть сомнения.

0
Ümañg ßürmån 23 Окт 2018 в 09:55
52945688