您將需要在繪圖中明確設置觸摸反饋(按鈕按下狀態)。改變背景意味着放棄反饋(即按下)狀態。
切換按鈕背景及其反饋/按下狀態的唯一方法是定義Drawable中的各種按鈕定義。這樣可以輕鬆切換背景,只需使用一個參考即可查看按鈕的所有狀態(禁用,按下,關注和啓用)。
setBackgroundResource()方法只將引用的資源設置爲全部 Button的狀態。因此,最好將Button定義及其所有狀態都明確地定義在Drawable中,並使用它們進行切換。 setBackgroundColor()也是如此,它會應用背景顏色覆蓋按鈕的所有狀態,並且只能在需要時使用(對於大多數情況下不應該使用)。
我不使用Android Studio。我使用老派的基於Eclipse的ADT,但是我相信沒有使用Drawables的解決方法,因爲Android應用程序開發是通過各種IDE進行標準化的。
這是很容易實現的可繪項目通過按鈕定義這裏有一個例子:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Button Disabled -->
<item
android:state_enabled="false">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#F4F4F4"
android:centerColor="#A6A6A6"
android:endColor="#F4F4F4"
android:angle="90"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<stroke
android:width="2dip"
android:color="#FFFFFF" />
<corners android:radius= "8dp" />
</shape>
</item>
<!-- Button Pressed/Feedback -->
<item
android:state_pressed="true"
android:state_enabled="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#2222EE"
android:centerColor="#22EE11"
android:endColor="#2222EE"
android:angle="90"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<stroke
android:width="2dip"
android:color="#FFFFFF" />
<corners android:radius= "8dp" />
</shape>
</item>
<!-- Button Focused -->
<!-- Sometimes developers define Shapes in a separate drawable. The code is the same. Here's an example. -->
<item
android:state_focused="true"
android:state_enabled="true"
android:drawable="@drawable/button_focused"> <!-- Refers to another drawable file with name "button_focused" -->
</item>
<!-- Button Enabled -->
<item
android:state_enabled="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="#22EE11"
android:centerColor="#2222EE"
android:endColor="#22EE11"
android:angle="90"/>
<padding android:left="7dp"
android:top="7dp"
android:right="7dp"
android:bottom="7dp" />
<stroke
android:width="2dip"
android:color="#FFFFFF" />
<corners android:radius= "8dp" />
</shape>
</item>
</selector>
分割你的按鈕定義成一個以上的繪製有它的優點和缺點。最好將一個Button定義保存爲一個可繪製的。
祝你好運!