前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 5.0 Button 按钮水纹效果的适配问题

Android 5.0 Button 按钮水纹效果的适配问题

作者头像
夏洛克的猫
发布2018-10-18 14:21:28
1.2K0
发布2018-10-18 14:21:28
举报
文章被收录于专栏:移动开发

从5.0开始,一些控件的点击时候默认是有水纹效果的如下图

这里写图片描述
这里写图片描述

以Button举例可以按照如下使用: 注意是android:theme

代码语言:javascript
复制
<Button  
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"
    android:theme="@style/MyButton"/>

自定义样式:

代码语言:javascript
复制
<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以下也是有按压变色的,虽然没有水波纹,下面的方法仍然适用其他控件的适配)

代码语言:javascript
复制
 <Button
                android:id="@+id/confirm"
                style="@style/GreenButton"
                android:text="@string/confirm" />
代码语言:javascript
复制
  <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

代码语言:javascript
复制
<?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>
代码语言:javascript
复制
<!--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>

有个问题需要注意,如果的想要你的波纹没有按压的时候为透明状态,下面的写法是无效的.会导致按压没有效果

代码语言:javascript
复制
<!--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>

正确的做法如下:

代码语言:javascript
复制
<!--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”会让系统并不会真的绘制,并告知波纹的绘制边界

如果写成下面,波纹的绘制范围会超出控件的边界

代码语言:javascript
复制
<!--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 效果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年03月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档