2015-04-27 68 views
13

我想在按鈕上使用漣漪效應。 AppCompat v22.1將AppCompatButton和新功能添加到AppCompat着色。AppCompatButton backgroundTint API <21

我的佈局:

<android.support.v7.widget.AppCompatButton 
     android:id="@+id/add_remove_button" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:backgroundTint="@color/primary" 
     android:textColor="@android:color/white" 
     android:text="Remove" /> 

在我的API 22測試設備的連鎖反應完美的作品,但我編碼API 11和不幸backgroundTint需要API> = 21,如何設置的連鎖反應到舊API版本的按鈕?

+0

可能http://stackoverflow.com/questions/26444391/primary-dark-color-android-under-api-21您可以將您的答案在這裏。 – Hardy

+0

在Lollipop之前,漣漪不能用於工作,所以你必須模仿它們。 – Egor

+0

Ripple僅適用於api> = 21 –

回答

54

只要使用app:backgroundTint而不是android:backgroundTint,色調將在棒棒糖下面生效。原因是AppCompatActivityAppCompatDelegateImplV7使用AppCompatViewInflater自動將Button或TextView更改爲AppCompatButton或AppCompatTextView,則app:backgroundTint纔會生效。

enter image description here

In my project I used it, it worked.

+2

「app」的定義是這樣的:xmlns:app =「http://schemas.android.com/apk/res-auto」 – jk7

+0

我有一個線性佈局,我使用的是android:background =「@ drawable/「background_sign_up」 app:backgroundTint =「#dd282d50」 android:backgroundTintMode =「multiply」,該怎麼做。 – ashishdhiman2007

+0

工作,但它說:「意外的名稱空間前綴」應用程序「發現標記按鈕在應用程序:backgroundTint行 – CGR

2

波紋不適用於Android < 21.這是由於性能問題:帶有新API的設備可以使用舊設備無法使用的RenderThread。 另請參閱:http://android-developers.blogspot.de/2014/10/appcompat-v21-material-design-for-pre.html

爲什麼前棒棒糖上沒有漣漪? 允許RippleDrawable平穩運行的很多東西都是Android 5.0的新RenderThread。爲了優化Android以前版本的性能,我們現在已經將RippleDrawable留了下來。