Как заставить векторный селектор рисовать в коде Java - PullRequest
0 голосов
/ 23 октября 2018

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

Вот мое использование 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.Ресурсы $ NotFoundException: файл res / drawable / common_selector_ic_back.xml из ID ресурса для рисования

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());

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

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

Кто-нибудь сталкивался с проблемой?Можете ли вы сказать мне, как получить векторной селектор в аппаратном коде.

Решение:

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

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Изменение действия для расширения AppCompatActivity

0 голосов
/ 23 октября 2018

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

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

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

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

</vector>

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

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

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

static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

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

...