2015-01-03 55 views
1

我在Android Studio中使用Android API 21。在Android中更改按鈕背景顏色後沒有觸摸反饋

我改變了一個按鈕的背景顏色。它停止提供早期提供的觸摸反饋。

我一直在尋找解決方案,並找到方法來創建drawables,但是我對Android的開發者網站了解觸摸反饋,我發現這些:

https://developer.android.com/design/style/touch-feedback.html

結合你的品牌是多少因爲默認的觸摸反饋適用於您選擇的任何色調。

https://developer.android.com/design/style/branding.html

在自定義顏色,觸感反饋應該是微妙的 - 只是稍微比不變顏色淺或深。

意思,觸感即使我改變的背景下,自動將工作?或者我需要做一些工作才能使其工作?另外,如果我需要手動重現反饋,我該怎麼做(比最新的Android Studio中的drawable更好的方法)?

剛開始用android,非常困惑。感謝你的幫助。謝謝。

回答

1

您將需要在繪圖中明確設置觸摸反饋(按鈕按下狀態)。改變背景意味着放棄反饋(即按下)狀態。

切換按鈕背景及其反饋/按下狀態的唯一方法是定義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定義保存爲一個可繪製的。

祝你好運!