Я установил оттенок моего 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), и цвет значка изменится автоматически. Есть ли способ программно установить другой цвет для одного или обоих включенных или отключенных цветов?
Нет ли способа изменить назначенный рисунок или применить другую тему с другими значениями для констант «icon_tint_disable_color» и «icon_tint_enable_color»?
Вы можете использовать что-то вроде этого, я думаю:
if (buttonMinus.isEnabled()){
//With button enabled
yourIcon.setItemIconTintList(ColorStateList.ValueOf(yourColor));
}else{...}
Нет, цель состоит в том, чтобы избежать программной установки визуальных атрибутов кнопки, чтобы избежать шума и ошибок в коде.
Лучший способ, который я нашел до сих пор, - это программно создать новый список состояний цвета и назначить его кнопке, да, цель состояла в том, чтобы избежать программной установки визуальных атрибутов, таких как цвета...
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?
@AtulGupta Вот как вы получаете отключенное состояние
Странно, в моем случае это работало без знака.
нужно создать (или получить с кнопки и отредактировать)
StateListDrawableпрограммно