Android 5.0 Button 按钮水纹效果的适配问题
2016-03-24 17:28
671 查看
从5.0开始,一些控件的点击时候默认是有水纹效果的如下图
以Button举例可以按照如下使用:
注意是android:theme
自定义样式:
但是这样在5.0以下的系统,这样就没有效果,按钮会变成默认的灰色状态,点击按钮也不会有颜色的状态区别
为了兼容5.0以下的设备,我们可以利用seletor(勘误:button用theme在5.0以下也是有按压变色的,虽然没有水波纹,下面的方法仍然适用其他控件的适配)
我们可以在drawable和drawable-v21下新建同一份文件selector_green_button.xml
有个问题需要注意,如果的想要你的波纹没有按压的时候为透明状态,下面的写法是无效的.会导致按压没有效果
正确的做法如下:
android:id=”@android:id/mask”会让系统并不会真的绘制,并告知波纹的绘制边界
如果写成下面,波纹的绘制范围会超出控件的边界
如上,这样设置后5.0以下的设备具有按钮按下变色的效果,5.0以上就具有水波纹效果.其他控件同理
后续:
Material Design Button 的 disable 效果
以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以下的系统,这样就没有效果,按钮会变成默认的灰色状态,点击按钮也不会有颜色的状态区别
为了兼容5.0以下的设备,我们可以利用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">//这里是扩散水波纹的色值
<item android:drawable="@color/green" />
</ripple>
有个问题需要注意,如果的想要你的波纹没有按压的时候为透明状态,下面的写法是无效的.会导致按压没有效果
<!--v21下 --> <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值 <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">//这里是扩散水波纹的色值 <item android:id="@android:id/mask" android:drawable="@color/white" />里面的色值可以任选一个 </ripple>
android:id=”@android:id/mask”会让系统并不会真的绘制,并告知波纹的绘制边界
如果写成下面,波纹的绘制范围会超出控件的边界
<!--v21下 --> <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/deep_green">//这里是扩散水波纹的色值 </ripple>
如上,这样设置后5.0以下的设备具有按钮按下变色的效果,5.0以上就具有水波纹效果.其他控件同理
后续:
Material Design Button 的 disable 效果
相关文章推荐
- Android LayoutInflater深度解析 给你带来全新的认识
- 【Android环境搭建】解决安装使用SDK Manager更新时的问题
- android应用开发框架+即时通讯IM app开发(2)-从github上下载代码并导入library
- android JNI实现方法(一)——CDT
- AndroidStudio实用技能(2)
- android自定义控件圆头像
- Android中使用ScrollView嵌套ListView终极解决方案
- Android-通过自定义ViewPager(中间放大效果)
- Android设计模式之单例模式
- Android Studio快捷键
- Android简易视频播放器
- 推荐几款实用的Android Studio 插件
- Android中的设计模式--建造者模式
- 调用.so 文件时报错has text relocations
- 如何自定义ActionBar显示标题在中间位置 可用
- Android App实现应用内部自动更新的最基本方法示例
- Android中的Divider(ListView分割线)
- Android中Parcelable接口用法
- Android 使用广播(BroadcastReceiver)传递数据
- Android下数据库的操作应用(二)