2011-09-29 50 views
2

我定义我的按钮的状态与设置按钮状态编程

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" > 
     <shape> 
      <gradient 
       android:endColor="@color/orange_light" 
       android:startColor="@color/orange" 
       android:angle="270" />    
      <corners 
       android:radius="6dp" /> 
      <padding 
       android:left="10dp"     
       android:right="10dp" /> 
     </shape> 
    </item> 

    <item android:state_focused="true" > 
     <shape> 
      <gradient 
       android:endColor="@color/orange_light" 
       android:startColor="@color/orange" 
       android:angle="270" /> 
      <corners 
       android:radius="6dp" /> 
      <padding 
       android:left="10dp"     
       android:right="10dp" /> 
     </shape> 
    </item> 

    <item>   
     <shape> 
      <gradient 
       android:endColor="@color/grey_light" 
       android:startColor="@color/grey" 
       android:angle="270" /> 
      <corners 
       android:radius="6dp" /> 
      <padding 
       android:left="10dp" 
       android:right="10dp" /> 
     </shape> 
    </item> 
</selector> 

并将其设置为我的按钮的背景。

当我按它它正确地改变颜色,但我希望它保持'按'的颜色一旦释放(显示哪个按钮被激活)。

我怎样才能做到这一点? requestFocus()不工作...

感谢

回答

2

在你的setOnClickListener中,你可以实现一些逻辑。例如,按钮被按下时,它会得到一种颜色,并保持该颜色,直到按下其他按钮,并且当我按下的第二个按钮比第一个按钮的背景被重置为默认值时为止。你只需要添加一些逻辑就可以了。如果你希望你的按钮,刚才的时间点颜色处于按下状态比覆盖触摸听者

你可以像这样

addButtonLayout.setOnTouchListener(new OnTouchListener() { 

    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
     imageAddSign.setImageResource(R.drawable.a); 
     }else{ 
     imageAddSign.setImageResource(R.drawable.b); 
     } 
     return false; 
    } 
}); 
0

我想,你需要的是一个复选框而不是一个按钮。如果你需要更多的功能,尝试在那里设置背景或者继承它。

+0

为什么你认为它是一个复选框?它可能是一个ToggleButton,但几乎不是CheckBox。 – CoolMind