的Android:按钮状态改变事件
按钮(如背景,文字颜色等)的某些XML属性可以与颜色或可拉伸状态列表中定义这样的:的Android:按钮状态改变事件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:color="#ffff0000"/>
<item android:state_focused="true"
android:color="#ff0000ff"/>
<item android:state_enabled="true"
android:color="#ff00ffff"/>
<item android:color="#ff000000"/>
</selector>
当视图状态更改(按压/未按下,例如),相应的颜色会自动改变。
如何可编程地处理某种stateChangedEvent来执行更复杂的布局更改,而不仅仅是更改颜色(例如,更改字体大小或设置其他文本)?
对于焦点更改和触摸事件,您可以通过setOnFocusChangeListener和setOnTouchListener注册侦听器。更改关于您可以在更改按钮状态后直接执行的禁用/启用状态。
看起来就像没有任何常见的方式一次处理所有的变化? – PVoLan 2011-12-15 11:18:18
针对特定视图的Handler onTouch(视图v,MotionEvent事件),并根据您的要求在MotionEvent.DOWN/Up中执行操作。
您必须通过findViewById(<object_id>)
参照查看对象(按钮),并使用API中的适当方法。
例如:
private Button aButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
aButton = (Button) findViewById(R.id.your_button_id);
//example 1
aButton.setVisibility(SomeExpressionEvaluation ? View.GONE : View.VISIBLE);
//example 2
if (SomeExpressionEvaluation) {
aButton.setText("Some Text");
}
等等,只是看看API,尤其是从View类继承的方法。
//使用选择方法来传递您的按钮和图像 //你可以用颜色也
b1=(Button)findViewById(R.id.button1);
// b2=(Button)findViewById(R.id.button2);
selector(b1, R.drawable.image_1_2, R.drawable.image_1);
// selector(b2, R.drawable.image_2_2, R.drawable.image_2);
}
public void selector(Button b,int pressed_image,int normal_image)
{
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},
getResources().getDrawable(pressed_image));
states.addState(new int[] { },
getResources().getDrawable(normal_image));
b.setBackgroundDrawable(states);
}
我必须说,你可以使用(触摸听者)该如何U使用触摸听者
image=(ImageView)findViewById(R.id.image);
找到乌尔图像第一
添加触摸听者到乌尔图像
image.setOnTouchListener(image_onTouch);
//添加触摸方法,它是通过名字image_onTouch
OnTouchListener image_onTouch=new OnTouchListener(){
@Override
public boolean onTouch(View arg0,MotionEvent arg1){
int iAction=arg1.getAction();
if(iAction==0){
image.setImageResource(R.drawable.image1);
}
else{
image.setImageResource(R.drawable.image2);
}
return false;
}
};
//图片1是乌尔图像其中U要2点击图片2是图像,当你触摸的形象,你必须做的另一个背景颜色你想要显示并在代码中使用它的图像
我以前也有这样的问题。我解决了将这个XML文件放在Res instaed drawable-mdpi或其他文件夹中的单独的可绘制文件夹中。并确保您必须将此Xml作为按钮的背景。
只是覆盖View.setPressed:
@Override
public void setPressed(boolean pressed) {
super.setPressed(pressed);
...
}
基要üWANNA表明,当按钮被点击的时候,已经被按下? – 2011-12-15 10:11:49
那么有没有听众听onSelected?由于程序callin setSelected(bool)的某些其他部分,它可能不发生点击。就像没有做自定义按钮类一样。 – 2014-06-04 07:12:11