2011-12-15 84 views
1

按钮(如背景,文字颜色等)的某些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来执行更复杂的布局更改,而不仅仅是更改颜色(例如,更改字体大小或设置其他文本)?

+1

基要üWANNA表明,当按钮被点击的时候,已经被按下? – 2011-12-15 10:11:49

+0

那么有没有听众听onSelected?由于程序callin setSelected(bool)的某些其他部分,它可能不发生点击。就像没有做自定义按钮类一样。 – 2014-06-04 07:12:11

回答

4

对于焦点更改和触摸事件,您可以通过setOnFocusChangeListener和setOnTouchListener注册侦听器。更改关于您可以在更改按钮状态后直接执行的禁用/启用状态。

+0

看起来就像没有任何常见的方式一次处理所有的变化? – PVoLan 2011-12-15 11:18:18

0

针对特定视图的Handler onTouch(视图v,MotionEvent事件),并根据您的要求在MotionEvent.DOWN/Up中执行操作。

0

您必须通过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类继承的方法。

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

我必须说,你可以使用(触摸听者)该如何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是图像,当你触摸的形象,你必须做的另一个背景颜色你想要显示并在代码中使用它的图像

0

我以前也有这样的问题。我解决了将这个XML文件放在Res instaed drawable-mdpi或其他文件夹中的单独的可绘制文件夹中。并确保您必须将此Xml作为按钮的背景。

1

只是覆盖View.setPressed:

@Override 
public void setPressed(boolean pressed) { 
    super.setPressed(pressed); 
    ... 
}