2014-11-06 188 views
0

我有三个Buttons。我希望按钮在点击时改变颜色,然后如果再次点击按钮,它会回到默认颜色。按钮不会改变背景点击

问题:如果我点击第一个,它会改变颜色。但是,如果我点击第二个,它不会改变颜色。但是如果我再次点击第二个Button,它会最终改变颜色。有谁知道为什么第二个Button不会在第一次点击时改变颜色?

注:调试后,我注意到is_clicked设置为1后,我点击第一个Button。所以当我点击第二个Button时,它认为它已经改变了颜色并将其设置回默认值。有谁知道我可以如何正确设置is_clicked标志?或者还有什么我应该做的?

int is_clicked = 0; 


public void ButtonOnClick(View v) { 

      switch (v.getId()) { 
       case R.id.button1: 
        if (is_clicked == 1){ 
         button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));; 
         is_clicked--; 
         break; 
        } 
        if (is_clicked == 0){ 
         button_list.get(0).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00)); 
         is_clicked++; 
         break; 
        } 
         break; 
       case R.id.button2: 
        if (is_clicked == 1){ 
         button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));; 
         is_clicked--; 
         break; 
        } 
        if (is_clicked == 0){ 
         button_list.get(1).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00)); 
         is_clicked++; 
         break; 
        } 
         break; 
       case R.id.button3: 
        if (is_clicked == 1){ 
         button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x00000000));; 
         is_clicked--; 
         break; 
        } 
        if (is_clicked == 0){ 
         button_list.get(2).getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFF00FF00)); 
         is_clicked++; 
         break; 
        } 
         break; 
       } 
      } 
+0

然后有三个INT is_clicked喜欢btn1_clicked,btn2_clicked,btn3_clicked – 2014-11-06 17:51:08

+0

HM,好建议。但是在我的程序中,我实际上有50个按钮。所以我希望我可以为所有情况使用一个is_clicked。我简单地将它缩短为三个按钮,这个例子和简单... – user2456977 2014-11-06 17:53:14

+2

它是一种不好的做法,设置这样的颜色,为什么你不用'Selector',你可以通过2或3行代码 – Pedram 2014-11-06 18:05:07

回答

1

虽然我同意佩德拉姆....根据您的要求,您在xml中使用标签。

将这个标签中的每个按钮

 android:tag="0" 

如果

String clicked= (String)btn1.getTag(); 
    If ("0".equals(clicked)) { 
    //set a color for your button 
     button1.setTag("1"); 
    } else { 
    //set a color for your button 
     button1.setTag("0"); 
    } 
1

它只是一个简单的按钮

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

    <item android:drawable="@drawable/normal" android:state_enabled="true" android:state_focused="true"/> 
    <item android:drawable="@drawable/pressed" android:state_enabled="true" android:state_pressed="true"/> 
    <item android:drawable="@android:color/white"/> 

</selector> 

将此设为您的按钮的背景

编辑:最后一个是默认的,也有更多的国家也一样,选择禁用,尝试与他们一起玩,你可以通过选择器做出很多功能。

这是一个不错的按钮。与中风和禁用状态。

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" > 
    <shape> 
     <solid 
      android:color="#00aeef" /> 
     <stroke 
      android:width="1dp" 
      android:color="#0090bf" /> 
     <corners 
      android:radius="6dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
<!--  #ef4444 #992f2f --> 
</item> 
    <item android:state_enabled="false"> 
     <shape> 
     <solid 
      android:color="#174574"/> 
     <stroke 
      android:width="1dp" 
      android:color="#12375D" /> 
     <corners 
      android:radius="6dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
    </item> 
<!-- Default --> 
    <item> 
    <shape> 
     <gradient 
      android:startColor="#3399FF" 
      android:endColor="#2E8AE6" 
      android:angle="270" /> 
     <stroke 
      android:width="1dp" 
      android:color="#297CCF" /> 
     <corners 
      android:radius="6dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
    </item> 
</selector> 
+0

对不起,我对这个有点新。我添加了哪个文件夹/文件?我是否可以绘制新的XML文件?或者我在创建按钮的layour xml中添加它? – user2456977 2014-11-06 18:17:38

+1

@ user2456977将它放在您的可绘制文件夹中,如果您还没有创建一个新文件夹,并且还要删除所有开关大小写代码,它只能通过XML工作。 – Pedram 2014-11-06 18:22:16

+0

自从英德拉用我现在的代码回答它之后,我不得不选择英德拉的答案。不过,我可能会按照你的建议改变我的代码。但我至少给了你一个赞成:)非常感谢! – user2456977 2014-11-06 18:28:15