2010-06-22 44 views
4

我有顏色安卓:改變按鈕的背景編程

<resources> 
    <color name="CLR_BLUE">#00f</color> 
    <color name="CLR_RED">#f00</color> 
    <color name="CLR_GREEN">#0f0</color> 
    <color name="CLR_YELLOW">#ff0</color> 
    <color name="CLR_BLUE_DARK">#00a</color> 
    <color name="CLR_RED_DARK">#a00</color> 
    <color name="CLR_GREEN_DARK">#0a0</color> 
    <color name="CLR_YELLOW_DARK">#aa0</color> 
</resources> 

這個資源文件,而這個方法被調用,當用戶點擊的四位一體的彩色Buttons

private void changeBackground(Button pressedBtn) 
{ 
    int oldColor = 0; 
    int newColor = 0; 

    if(pressedBtn == greenBtn) { 
     oldColor = R.color.CLR_GREEN; 
     newColor = R.color.CLR_GREEN_DARK; 
    } 
    else if (pressedBtn == redBtn) { 
     oldColor = R.color.CLR_RED; 
     newColor = R.color.CLR_RED_DARK; 
    } 
    else if (pressedBtn == yellowBtn) { 
     oldColor = R.color.CLR_YELLOW; 
     newColor = R.color.CLR_YELLOW_DARK; 
    } 
    else if (pressedBtn == blueBtn) { 
     oldColor = R.color.CLR_BLUE; 
     newColor = R.color.CLR_BLUE_DARK; 
    } 
    else return; 

    pressedBtn.setBackgroundResource(newColor); 
    SystemClock.sleep(500); 
    pressedBtn.setBackgroundResource(oldColor); 

} 

的問題是按下時按鈕的顏色不會改變。 我用調試器走了一步,它實際上達到了方法中的正確點,所以這不是問題。我認爲問題出在pressedBtn.setBackgroundResource(newColor),但我不明白爲什麼。

PS:無論如何,如果你有更好的解決方案來改變按鈕的顏色,並在半秒鐘後,改回原來的顏色,讓我知道。

回答

11

您可以使用如下所示的xml文件爲您的按鈕創建狀態。

可用屬性的信息是here. 您只需將此XML文件複製到可繪製文件夾中的項目,將其命名爲例如custom_button.xml,並與

android:background="@drawable/custom_button"

引用它在佈局下面是xml文件...

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

<item android:state_pressed="true" > 
    <shape android:shape="rectangle"> 
     <solid 
      android:color="#00ff00" /> 
     <stroke 
      android:width="5dp" 
      android:color="#ff0000" 
      android:dashWidth="3dp" 
      android:dashGap="2dp" /> 
    </shape> 
</item> 

<item android:state_focused="true" > 
    <shape> 
     <gradient 
      android:endColor="#ffffff" 
      android:centerColor="#ffffff" 
      android:startColor="#ffffff" 
      android:angle="270" /> 
     <stroke 
      android:width="3dp" 
      android:color="#00ff00" /> 
     <corners 
      android:radius="5dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item>   
    <shape> 
     <gradient 
      android:endColor="#ffffff" 
      android:centerColor="#ffffff" 
      android:startColor="#ffffff" 
      android:angle="270" /> 
     <stroke 
      android:width="5dp" 
      android:color="#00ff00" /> 
     <corners 
      android:radius="5dp" /> 
    </shape> 
</item> 

+0

此刻我有點忙碌。只要我嘗試一下,我會讓你知道的。現在謝謝。 – 2010-06-23 11:28:37

+0

我不得不適應它,但完美的作品!非常感謝 – 2010-06-28 22:45:59

4

setBackgroundResource期待可繪製而不是顏色。你想要setBackgroundColor

而且,你的顏色應該至少有6位,#RRGGBB

即對於藍色:#0000FF

我覺得你有什麼可能相當於#00000F,這是接近黑色。最後,你永遠不應該睡在UI線程中(或者不要在UI線程中更改UI項目)。有關使用其他線程的多種不同方式,請參閱Painless Threading。我認爲postDelayed可能是你正在尋找的。

+0

nope,按鈕變黑,不會變回原來的顏色。至少在模擬器中。當我完成對G1的刷新時,我會嘗試使用 – 2010-06-22 23:23:30

+0

請參閱編輯以獲取更多信息 – 2010-06-22 23:55:50

17

我們試圖在Android中使用普通按鈕來實現標籤功能。我沒有成功地使用XML來獲得正確的行爲 - 必須做出錯誤的事情。例如,只要按鈕被按下,我就可以使按鈕的顏色變成黃色,但當它離開時,它會回到原來的顏色。

最後,我可以通過在每個選項卡按鈕的click事件處理程序中使用以下代碼來實現所需的行爲。希望這能幫助那些和我有類似問題的人。

// Get Handle for the Tab buttons 
Button btnTab1 = (Button) findViewById(R.id.button_tab1); 
Button btnTab2 = (Button) findViewById(R.id.button_tab1); 

// set the colors correctly 
btnTab1.setBackgroundResource(color.lightblue); 
btnTab2.setBackgroundResource(color.darkblue); 
+1

當您按下按鈕時,這是否會使標準android的行爲變得更暗? – Zapnologica 2017-09-29 11:36:27