Селектор изменения, назначенный оттенку программно

Я установил оттенок моего 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), и цвет значка изменится автоматически. Есть ли способ программно установить другой цвет для одного или обоих включенных или отключенных цветов?

нужно создать (или получить с кнопки и отредактировать) StateListDrawable программно

Vladyslav Matviienko 14.02.2019 10:34

Нет ли способа изменить назначенный рисунок или применить другую тему с другими значениями для констант «icon_tint_disable_color» и «icon_tint_enable_color»?

Bencri 14.02.2019 10:52
0
2
947
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Bencri 14.02.2019 10:48
Ответ принят как подходящий

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

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

        buttonMinus.setImageTintList(buttonStates);

Почему знак минус в android.R.attr.state_enabled?

AndroidEngineX 01.07.2021 12:25

@AtulGupta Вот как вы получаете отключенное состояние

Bencri 01.07.2021 17:24

Странно, в моем случае это работало без знака.

AndroidEngineX 30.07.2021 21:00

Другие вопросы по теме