EditText странное поведение - PullRequest
0 голосов
/ 08 июня 2018

В Android (Java) у меня в приложении динамически окрашен текстовый текстовый вид.Чтобы сделать цвет фона EditText «primaryColor», я написал следующую строку кода:

public void setEditTextThingsColor(EditText view) {
    view.getBackground().setColorFilter(colorPrimary, PorterDuff.Mode.SRC_ATOP);
    (...some other settings...)
}

, где view - мой элемент EditText, primaryColor загружен из базы данных.

IЯ проверил его на API 27 и API 19. Он отлично работает на API 27. На API 19 нет.

Однако, когда я написал такой код:

public void setEditTextThingsColor(EditText view) {
    Drawable temp = view.getBackground();
    temp.setColorFilter(colorPrimary, PorterDuff.Mode.SRC_ATOP);
    view.setBackground(temp);
    (...some other settings...)
}

, он отлично работает на обоих API.

В чем причина такого поведения?

Может ли API 19 найти мой элемент неизменным или около того?

1 Ответ

0 голосов
/ 08 июня 2018

Да, в методе setColorFilter() мало изменений.Не уверен, является ли это основной причиной такого поведения.Нужно больше смотреть на это.Ниже приведен код из обеих версий

Из KitKat

440    /**
441     * Specify a color and porterduff mode to be the colorfilter for this
442     * drawable.
443     */
444    public void setColorFilter(int color, PorterDuff.Mode mode) {
445        setColorFilter(new PorterDuffColorFilter(color, mode));
446    }

и из Орио

582    /**
583     * Specify a color and Porter-Duff mode to be the color filter for this
584     * drawable.
585     * <p>
586     * Convenience for {@link #setColorFilter(ColorFilter)} which constructs a
587     * {@link PorterDuffColorFilter}.
588     * </p>
589     * <p class="note"><strong>Note:</strong> Setting a color filter disables
590     * {@link #setTintList(ColorStateList) tint}.
591     * </p>
592     */
593    public void setColorFilter(@ColorInt int color, @NonNull PorterDuff.Mode mode) {
594        if (getColorFilter() instanceof PorterDuffColorFilter) {
595            PorterDuffColorFilter existing = (PorterDuffColorFilter) getColorFilter();
596            if (existing.getColor() == color && existing.getMode() == mode) {
597                return;
598            }
599        }
600        setColorFilter(new PorterDuffColorFilter(color, mode));
601    }

Вместо использования android.widget. EditText используйте android.support.v7.widget. AppCompatEditText , чтобы сделать общее поведение для всехверсии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...