Android按钮在Java(不是XML)中以编程方式声明

时间:2011-12-07 06:46:14

标签: android user-interface

如何为“state_pressed”定义Android按钮图像 Java中的“android:state_focused”?

例如,如何从

中完成XML中的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>

3 个答案:

答案 0 :(得分:13)

只需使用StateListDrawable的addState方法

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

答案 1 :(得分:4)

创建StateListDrawable的实例,然后为其分配imagebutton.setImageDrawable(stateDrawable)

答案 2 :(得分:1)

10倍到唐克,我用这个用于不同的列表项颜色选择颜色。

选定状态

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