Кнопка Android заявлена программно в Java (не XML)
Как определить изображение кнопки Android для "state_pressed"
"android: state_focused" в Java?
Например, как выполнить эквивалент в Java для XML из
http://developer.android.com/reference/android/widget/ImageButton.html
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <!-- focused -->
<item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Ответы
Ответ 1
Просто используйте метод addState для StateListDrawable
StateListDrawable stateListDrawable = new StateListDrawable();
stateListDrawable.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(R.drawable.phone));
Вы можете использовать константы ниже для первого параметра этого метода
android.R.attr.state_accelerated
android.R.attr.state_activated
android.R.attr.state_active
android.R.attr.state_drag_can_accept
android.R.attr.state_drag_hovered
android.R.attr.state_enabled
android.R.attr.state_first
android.R.attr.state_focused
android.R.attr.state_hovered
android.R.attr.state_last
android.R.attr.state_middle
android.R.attr.state_pressed
android.R.attr.state_selected
android.R.attr.state_single
android.R.attr.state_window_focused
Ответ 2
Создайте экземпляр StateListDrawable
, а затем назначьте его imagebutton.setImageDrawable(stateDrawable)
.
Ответ 3
10x to Tang Ke, я использую это для выбора цвета цвета белого цвета элемента списка.
выбранное состояние
stateListDrawable.addState(new int[] {android.R.attr.state_pressed},
new ColorDrawable(getResources().getColor(R.color.alpha_blue500)));
Состояние по умолчанию
stateListDrawable.addState(new int[] {},
new ColorDrawable(getResources().getColor(R.color.red)));
Здесь вы можете изменить цвет для другого состояния элемента строки (например, платного vs бесплатно)
установить состояние в пользовательский элемент строки макета в адаптере списка
holder.relativeLayout.setBackgroundDrawable(stateListDrawable);