Кнопка 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> 

Просто используйте метод 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 

Создайте экземпляр StateListDrawable а затем назначьте его с помощью imagebutton.setImageDrawable(stateDrawable) .

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))); 

Здесь вы можете изменить цвет для другого состояния элемента строки (например, оплаченного или бесплатного)

Установить состояние в пользовательский элемент строки макета в адаптере списка

 holder.relativeLayout.setBackgroundDrawable(stateListDrawable);