Android - attr / colorAccent, использующий неправильный цвет в API 21 - PullRequest
0 голосов
/ 14 мая 2018

У меня есть две кнопки в моем макете, как это:

enter image description here

На левой стороне есть android:backgroundTint="?attr/colorAccent", и она правильно отображается фиолетовым цветом.Кнопка справа имеет android:backgroundTint="@color/button_color", где @color/button_color определено в XML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/gray"/>
    <item android:color="?attr/colorAccent" />
</selector>

В версиях для Android> 22 обе кнопки правильно отображаются фиолетовым, однако только для API 21 и 22 (Iне тестировал ниже, так как мое приложение поддерживает только> = 21), кнопка, которая использует android:backgroundTint="@color/button_color" показывает (на первый взгляд случайный) красный цвет.

Как я могу заставить ?attr/colorAccent отображать правильный цвет при использованиив button_color.xml?

1 Ответ

0 голосов
/ 15 мая 2018

Я до сих пор не уверен, что вызывает эту проблему, но я обошел ее, применив код ColorStateList в таком виде:

button.setBackgroundTintList(
    new ColorStateList(
            new int[][]{
                    new int[]{-android.R.attr.state_enabled}, //Disabled
                    new int[]{} //Default
            },
            new int[]{
                    disabledColor,
                    defaultColor
            }
    )
);

Чтобы установить defaultColor равным атрибуту цвета акцента, я использую следующий метод:

public static int getAccentColor(final Context context) {
    final TypedValue typedValue = new TypedValue();
    final TypedArray a = context.obtainStyledAttributes(typedValue.data, new int[]{android.R.attr.colorAccent});
    final int color = a.getColor(0, 0);
    a.recycle();
    return color;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...