2013-01-02 158 views
8

我有一些按鈕,我將它的背景色分別設置爲紅色,綠色和藍色。當我按下按鈕時,會產生單擊事件,但gui中用戶不知道按鈕被按下時沒有變化。 Android按鈕的默認背景灰色將變爲橙色,並在釋放按下狀態後恢復爲淺灰色。如何在彩色按鈕上實現這個?如何在Android中按下時更改顏色按鈕的顏色?

回答

26

這是通過StateListDrawable實現的,selector代表XML。參考:http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

這裏是一個繪製一個例子,當按下這將是白色的默認,黑色:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
      android:drawable="@android:color/black" /> <!-- pressed --> 
    <item android:drawable="@android:color/white" /> <!-- default --> 
</selector> 
+0

非常感謝它完美的工作 – amy

2

嘗試這個辦法:

<?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="#1E669B" /> 
      <stroke 
       android:width="2dp" 
       android:color="#1B5E91" /> 
      <corners 
       android:radius="6dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" />    
     </shape> 
    </item> 
    <item> 
     <shape> 
      <gradient 
       android:startColor="#1E669B" 
       android:endColor="#1E669B" 
       android:angle="270" /> 
      <stroke 
       android:width="4dp" 
       android:color="#1B5E91" /> 
      <corners 
       android:radius="7dp" /> 
      <padding 
       android:left="10dp" 
       android:top="10dp" 
       android:right="10dp" 
       android:bottom="10dp" /> 
     </shape> 
    </item> 
</selector> 
8

正如K-Ballo所提到的,您可以使用StateListDrawable來根據狀態實現具有各種不同圖形的視圖。在你的情況下,按鈕是兩個狀態是按下按鈕而沒有按下按鈕的視圖。

我們需要在繪製文件夾中創建buttonselector.xml文件

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

    <item android:drawable="@drawable/button_not_pressed" android:state_pressed="false" android:state_selected="false"/> 
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/> 

</selector> 

的按鈕button_pressed狀態

button_not_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FFFFFF" 
     android:centerColor="#FFFFFF" 
     android:endColor="#FFFFFF" 
     android:angle="270" /> 
</shape> 

創建兩個單獨的XML文件.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient 
     android:startColor="#FF0000" 
     android:centerColor="#FF0000" 
     android:endColor="#FF0000" 
     android:angle="270" /> 
</shape> 

您會注意到兩個html顏色代碼#FF0000 & #FFFFFF,它們代表根據狀態顯示按鈕的背景顏色。

在你的main.xml,你設置你的自定義按鈕

<Button 
     android:id="@+id/customButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/buttonselector" 
     android:text="test" 
     android:textColor="#000000" /> 

的風格在你活動類添加以下兩行

Button customButton = (Button) findViewById(R.id.customButton); 
customButton.setBackground(getResources().getDrawable(R.drawable.buttonselector)); 

希望它可以幫助

+0

更徹底的答案! – Diesel