2014-11-06 244 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