按钮的某些XML属性(例如background,textColor等)可以使用颜色或可绘制状态List定义,如下所示:
<?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>
当视图状态发生变化时(例如,按下/未按下),相应的颜色会自动更改。
如何只是更改颜色(例如,更改字体大小或设置其他文本),我如何通过prograqmmatically处理某种stateChangedEvent来执行更复杂的布局更改?
答案 0 :(得分:4)
对于焦点更改和触摸事件,您可以通过setOnFocusChangeListener和setOnTouchListener注册侦听器。关于禁用/启用状态的更改,您可以在更改按钮状态后直接执行。
答案 1 :(得分:4)
//使用选择器方法传递按钮和图像 //你也可以使用颜色
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);
}
答案 2 :(得分:1)
只需覆盖View.setPressed:
@Override
public void setPressed(boolean pressed) {
super.setPressed(pressed);
...
}
答案 3 :(得分:0)
处理器onTouch(View v,MotionEvent事件)用于特定视图,并根据您的要求在MotionEvent.DOWN / Up中执行操作。
答案 4 :(得分:0)
您必须通过findViewById(<object_id>)
对视图对象(按钮)进行引用,然后使用API中的相应方法。
例如:
私人按钮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类中的继承方法。
答案 5 :(得分:0)
我必须说你可以使用(触摸列表器)这个如何使用触摸列表器
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是您希望2次点击的图像,图像2是触摸该图像时的图像,您必须制作另一个图像,其中您想要显示背景颜色并在代码中使用它
答案 6 :(得分:0)
过去我也遇到过这种问题。我通过将此XML文件放在res instaed of drawable-mdpi中的单独drawable文件夹中来解决。并确保您必须将此Xml作为按钮的背景。