1

我正在编写一个只有一个按钮的程序。一开始,按钮是默认颜色;单击按钮时,其背景颜色变为红色,然后再次单击,其背景颜色变为默认颜色。关于在方法中编写代码有什么建议myButton.setOnClickListener(new OnClickListener(){}吗?谢谢

4

3 回答 3

1
// Class member variable
private Drawable defaultDrawable;

myButton.setOnClickListener(new OnClickListener()
{
    if(defaultDrawable == null)
    {
        defaultDrawable = myButton.getDrawable();
        myButton.setBackgroundColor(Color.BLUE);
    }
    else
    {
        myButton.setBackgroundDrawable(defaultDrawable);
        defaultDrawable=null;
    }

}

您绝对可以改进逻辑以使其更具可读性。

您也可以简单地使用具有两种状态的 ToggleButton。每个状态都有自己的背景可绘制/颜色,您可以在 xml 文件中指定。不需要听者。

于 2012-07-04T19:05:45.807 回答
0

你可以这样做:

 boolean isSelected = false;
 int color1 = R.color.mycolor1;
 int color2 = R.color.mycolor2;
 myButton.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            if(isSelected){
                  btn.setBackgroundColor( color1 );
            } else {
                btn.setBackgroundColor( color2 );
            }
            isSelected = !isSelected;               
        }
    });

另一种解决方案是扩展按钮类,将您的 isSelected 标志存储为成员类。这样,您可以在任何需要的地方重复使用这种按钮。

于 2012-07-04T18:59:48.930 回答
0

您可以从当前主题的 R.attr.buttonStyle 获取颜色,如下所示:

  public static int getAttrResId( Context context, int attrId ) {
    TypedValue outValue = new TypedValue();
    context.getTheme().resolveAttribute( attrId, outValue, true );
    return outValue.resourceId;
  }
于 2012-07-04T19:08:15.180 回答