Android 设置主题实现点击波纹效果的示例
开头先说说大家都知道的material design。
material design:
material design是google推出的一个全新的设计语言,它的特点就是拟物扁平化。
material design包含了很多内容,我大致把它分为四部分:
- 主题和布局
- 视图和阴影
- ui控件
- 动画
material theme
使用material主题:
material主题只能应用在android l版本。
应用material主题很简单,只需要修改res/values/styles.xml文件,使其继承android:theme.material。如下:
<!-- res/values/styles.xml --> <resources> <!-- your app's theme inherits from the material theme --> <style name="apptheme" parent="android:theme.material"> <!-- theme customizations --> </style> </resources>
或者在androidmanifest.xml中直接设置主题:
android:theme="@android:style/theme.material.light"
在最新的5.0中,google似乎不推荐使用material design主题了,而是由appcompat代替。
<resources> <!-- base application theme. --> <style name="apptheme" parent="theme.appcompat.light.darkactionbar"> <!-- customize your theme here. --> <item name="colorprimary">@color/colorprimary</item> <item name="colorprimarydark">@color/colorprimarydark</item> <item name="coloraccent">@color/coloraccent</item> </style> </resources>
自定义状态条和导航条:
material还允许你轻松的自定义状态条和导航条的颜色。
可以使用如下属性(参考下方图片):
android:statusbarcolor,window.setstatusbarcolor
兼容性:
由于material theme只可以在android l developer preview中使用。
所以在低版本使用的话就需要为其另设一套主题:
在老版本使用一套主题 res/values/styles.xml,在新版本使用material主题res/values-v21/styles.xml.
系统自带点击事件的控件一般都具有默认的波纹效果,直接使用即可:
<relativelayout android:layout_width="match_parent" android:layout_height="wrap_content" > <button android:id="@+id/mybtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawablepadding="10dp" android:gravity="center_vertical" android:paddingbottom="15dip" android:paddingleft="15dip" android:paddingright="25dip" android:paddingtop="15dip" android:text="click" android:textcolor="@color/common_black_text" android:textsize="16sp" /> </relativelayout>
怎么为view添加点击波纹效果呢,先了解下面的东西。
触摸反馈:
在android l5.0中加入了触摸反馈动画。
其中最明显,最具代表性的就是波纹动画,比如当点击按钮时会从点击的位置产生类似于波纹的扩散效果。
波纹效果(ripple):
当你使用了material主题后,波纹动画会自动应用在所有的控件上,我们当然可以来设置其属性来调整到我们需要的效果。
可以通过如下代码设置波纹的背景:
android:background="?android:attr/selectableitembackground"波纹有边界 android:background="?android:attr/selectableitembackgroundborderless"波纹超出边界
使用效果如下:
b1是不设任何背景的按钮
b2设置了?android:attr/selectableitembackground
b3设置了?android:attr/selectableitembackgroundborderless
设置颜色
我们也可以通过设置xml属性来调节动画颜色,从而可以适应不同的主题:
android:colorcontrolhighlight:设置波纹颜色
android:coloraccent:设置checkbox等控件的选中颜色
比如下面这个比较粉嫩的主题,就需要修改动画颜色来匹配(上面已经有介绍):
为view添加波纹效果:
<relativelayout android:id="@+id/user_info_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:background="?android:attr/selectableitembackground" android:layout_margintop="10dp" android:paddingbottom="15dip" android:paddingtop="15dip"> <textview android:id="@+id/user_info_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawablepadding="10dp" android:gravity="center_vertical" android:paddingleft="15dip" android:paddingright="25dip" android:text="我的资料" android:textsize="16sp" /> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_centerinparent="true" android:contentdescription="@null" android:paddingright="15dip" /> </relativelayout>
为textview添加波纹效果:
<linearlayout android:layout_width="match_parent" android:layout_height="68dp" android:weightsum="4" android:gravity="center_vertical"> <textview android:id="@+id/user_unpaid" android:layout_width="0dp" android:layout_height="wrap_content" android:background="?android:attr/selectableitembackgroundborderless" android:drawabletop="@mipmap/ic_user_paid" android:drawablepadding="5dp" android:gravity="center" android:layout_weight="1" android:text="待付款" android:textsize="12sp" android:clickable="true"/> <textview android:id="@+id/user_paid" android:layout_width="0dp" android:layout_height="wrap_content" android:background="?android:attr/selectableitembackgroundborderless" android:drawabletop="@mipmap/ic_user_paid" android:drawablepadding="5dp" android:layout_weight="1" android:gravity="center" android:text="待发货" android:textcolor="@color/common_black_text" android:textsize="12sp" android:clickable="true"/> <textview android:id="@+id/user_unreceived" android:layout_width="0dp" android:layout_height="wrap_content" android:background="?android:attr/selectableitembackgroundborderless" android:drawabletop="@mipmap/ic_user_paid" android:drawablepadding="5dp" android:gravity="center" android:layout_weight="1" android:text="待收货" android:textcolor="@color/common_black_text" android:textsize="12sp" android:clickable="true"/> <textview android:id="@+id/user_completed" android:layout_width="0dp" android:layout_height="wrap_content" android:background="?android:attr/selectableitembackgroundborderless" android:drawabletop="@mipmap/ic_user_paid" android:drawablepadding="5dp" android:gravity="center" android:layout_weight="1" android:text="已完成" android:textsize="12sp" android:clickable="true"/> </linearlayout>
这样就可以实现波纹效果啦!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: C#动态调整数组大小的方法