Android:按钮状态已更改事件

时间:2011-12-15 09:52:45

标签: android

按钮的某些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来执行更复杂的布局更改?

7 个答案:

答案 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作为按钮的背景。