從5.0開始,一些控件的點(diǎn)擊時(shí)候默認(rèn)是有水紋效果的如下圖
以Button舉例可以按照如下使用:
注意是android:theme
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:theme="@style/MyButton"/>
自定義樣式:
<style name="MyButton" parent="Theme.AppCompat.Light">
<item name="colorControlHighlight">@color/indigo</item>
<item name="colorButtonNormal">@color/pink</item>
</style>
但是這樣在5.0以下的系統(tǒng),這樣就沒有效果,按鈕會變成默認(rèn)的灰色狀態(tài),點(diǎn)擊按鈕也不會有顏色的狀態(tài)區(qū)別
為了兼容5.0以下的設(shè)備,我們可以利用seletor(勘誤:button用theme在5.0以下也是有按壓變色的,雖然沒有水波紋,下面的方法仍然適用其他控件的適配)
<Button
android:id="@+id/confirm"
style="@style/GreenButton"
android:text="@string/confirm" />
<style name="GreenButton">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/button_height_tall</item>
<item name="android:background">@drawable/selector_green_button</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/font_large</item>
</style>
我們可以在drawable和drawable-v21下新建同一份文件selector_green_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/deep_green" android:state_pressed="true" />
<item android:drawable="@color/green" />
</selector>
<!--v21下 -->
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/deep_green">//這里是擴(kuò)散水波紋的色值
<item android:drawable="@color/green" />
</ripple>
有個(gè)問題需要注意,如果的想要你的波紋沒有按壓的時(shí)候?yàn)橥该鳡顟B(tài),下面的寫法是無效的.會導(dǎo)致按壓沒有效果
<!--v21下 -->
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/deep_green">//這里是擴(kuò)散水波紋的色值
<item android:drawable="@android:color/transparent" />//這里你用透明色和透明的圖片都是沒有效果的
</ripple>
正取的做法如下:
<!--v21下 -->
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/deep_green">//這里是擴(kuò)散水波紋的色值
<item android:id="@android:id/mask" android:drawable="@color/white" />里面的色值可以任選一個(gè)
</ripple>
android:id="@android:id/mask"會讓系統(tǒng)并不會真的繪制,并告知波紋的繪制邊界
如果寫成下面,波紋的繪制范圍會超出控件的邊界
<!--v21下 -->
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/deep_green">//這里是擴(kuò)散水波紋的色值
</ripple>
如上,這樣設(shè)置后5.0以下的設(shè)備具有按鈕按下變色的效果,5.0以上就具有水波紋效果.其他控件同理