1.項目得用5.0或5.0以上的sdk 編譯襟交。
如:
android{
compileSdkVersion 21
buildToolsVersion '21.1.2'
}
2.添加 5.0樣式(material design)
在value下染簇,新建文件夾values-v21
添加styles.xml
<?xml version="1.0" encoding="uft-8">
<resources>
<style name="AppBaseTheme" parent="android:Theme.Material.Light">
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
3.添加一些5.0 對應(yīng)的drawable 或者selector
首先新建一個drawable-v21的文件夾
- a.有背景圖片的按鈕(Button)
正常情況下娄蔼,我們會寫一個selector
如:selector_login.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
>
<!-- 這里只寫了一種狀態(tài)窥翩,也可以寫多種-->
<item android:drawable="@drawable/log_in"/>
</selector>
在drawable-21 里添加對應(yīng)的文件( selector_login.xml )
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/post_item_list_s_ripple"><!-- 這里的這個color是必須不可少的參數(shù)-->
<item android:drawable="@drawable/log_in"/>
</ripple>
android:color="@color/post_item_list_s_ripple" 這個顏色值 恭金,就是對應(yīng)的波紋顏色。
最后勇边,在對應(yīng)的按鈕里設(shè)置背景就Ok
<Button
android:id="@+id/btnExit"
style="@style/layout_wrap"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
android:background="@drawable/selector_login"
android:text="@string/setting_exit"
android:textColor="@color/white_color" />
- b.listview列表選項犹撒。
其本和上面按鈕的是一樣的。但是有幾點(diǎn)注意粒褒。
1.發(fā)現(xiàn)用listSelector 比 用 itemView 的backgroud兼容性更好识颊。
如果用listSelector的話:
item normal 時的顏色最好設(shè)置成ListView 的背景顏色。否則ListView 的item 都是沒有默認(rèn)色奕坟。
4.用代碼創(chuàng)建 RippleDrawable
首先祥款,創(chuàng)建一個selector (用代碼的方式)
// 代碼構(gòu)建一個shape
GradientDrawable drawable = new GradientDrawable();
drawable.setColor(Color.parseColor("#ffffff"));
drawable.setStroke(1, getResources().getColor(R.color.all_bg));
GradientDrawable drawable_h = new GradientDrawable();
drawable_h.setColor(getResources().getColor(R.color.all_bg));
//構(gòu)建一個根據(jù) view 狀態(tài)改變的Drawable
StateListDrawable stateListDrawable = new StateListDrawable();
//Non focused states
stateListDrawable.addState(new int[]{-android.R.attr.state_focused,
-android.R.attr.state_selected,
-android.R.attr.state_pressed},
drawable);
stateListDrawable.addState(new int[]{-android.R.attr.state_focused,
android.R.attr.state_selected,
-android.R.attr.state_pressed},
drawable_h);
//Focused states
stateListDrawable.addState(new int[]{android.R.attr.state_focused,
-android.R.attr.state_selected, -android.R.attr.state_pressed},
drawable_h);
stateListDrawable.addState(new int[]{android.R.attr.state_focused,
android.R.attr.state_selected, -android.R.attr.state_pressed},
drawable_h);
//Pressed
stateListDrawable.addState(new int[]{android.R.attr.state_selected,
android.R.attr.state_pressed},
drawable_h);
stateListDrawable.addState(new int[]{android.R.attr.state_pressed},
drawable_h);
//上面是一個完整的,所以有點(diǎn)多月杉∪絮耍可以取部分自己需要。
創(chuàng)建RippleDrawable 就稍微簡單得一點(diǎn)兒
// 還是上面的drawable 和 drawable_h
ColorStateList stateList = ColorStateList.valueOf(Color.parseColor("#cccccc"));
RippleDrawable rippleDrawable = new RippleDrawable(stateList,drawable,drawable_h);