Изменить селектор, назначенный для тонирования программно - PullRequest
0 голосов
/ 14 февраля 2019

Я установил оттенок на оттенок моего ImageButton, чтобы цвет значка автоматически изменялся при включении или отключении кнопки, есть ли способ изменить оттенок программно после этого, поэтому я сохраняю то же самое поведение только сразные цвета для включенного и отключенного состояния?

Содержимое my_layout.xml:

<ImageButton
    android:id="@+id/button_minus"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:background="@color/default_button_background"
    android:tint="@drawable/button_tint_color"
    app:srcCompat="@drawable/ic_remove_24px" />

Содержимое button_tint_color.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_enabled="false"
        android:color="@color/icon_tint_disable_color" />

    <item
        android:color="@color/icon_tint_enable_color" />
</selector>

Тогда в моем коде я могу просто сделать buttonMinus.setEnabled(true) или buttonMinus.setEnabled(false), и цвет значка изменится автоматически.Есть ли способ программно установить другой цвет для одного или обоих включенных или отключенных цветов?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Лучший способ, который я нашел до сих пор, - это создать новый список состояний цвета программно и назначить его кнопке, да, цель состояла в том, чтобы избежать установки визуальных атрибутов, таких как цвета, программно ...

        ColorStateList buttonStates = new ColorStateList(
                new int[][] {
                        { -android.R.attr.state_enabled },
                        {}
                },
                new int[] {
                        Color.RED,
                        Color.BLUE
                }
        );

        buttonMinus.setImageTintList(buttonStates);
0 голосов
/ 14 февраля 2019

Вы можете использовать что-то вроде этого, я думаю:

if(buttonMinus.isEnabled()){
//With button enabled
yourIcon.setItemIconTintList(ColorStateList.ValueOf(yourColor));
}else{...}
...