FAB 听说你还没用过?

开发 开发工具
Design Support Library 是 Google 发布的一个全新的兼容函数库,它可以在 Android 2.1 (Api level 7)及以上的设备中,实现 Material Design 的效果,这个函数库同时也提供了一系列控件。今天介绍的 Floating Action Button 就是其中之一。

一、前言

Design Support Library 是 Google 发布的一个全新的兼容函数库,它可以在 Android 2.1 (Api level 7)及以上的设备中,实现 Material Design 的效果,这个函数库同时也提供了一系列控件。今天介绍的 Floating Action Button 就是其中之一。

在使用 Design Support Library 之前,需要在 build.gradle 文件中,添加依赖。

  1. compile 'com.android.support:design:25.3.0' 

浮动操作按钮(下文简称 FAB )是 Material Design 新引入的组件,主要用于强调当前页面的一些重要操作。虽然在 Material Design 的风格里,大家都很推崇使用 FAB ,但是因为它在页面中特别的引人注目,所以在使用的时候最好慎重,只在必要的时候才去使用它,它应该使用在一些高频的操作上。

二、FAB的基本使用

FAB 使用起来非常的简单,它本身也是继承自 ImageView 的,所以之前 ImageView 的使用方法,在 FAB 上也有一些可以借鉴。

1、在布局中加载 FAB

既然 FAB 是继承自 ImageView ,所以它可以和 ImageVIew 一样被加在 xml 布局中。

加上之后,就可以发现在右下角出现一个 FAB 按钮。

FAB 有自己的属性可以被设置,这些可以从源码中了解到。

下面分别介绍 FAB 支持的几个属性和含义:

  • app:backgroundTint : 设定 FAB 的背景色。
  • app:rippleColor : 设定点击的 Ripple 效果的波纹颜色。
  • app:fabSize : 设定 FAB 的尺寸,它支持三种设定:auto、normal、mini。
  • app:borderWidth : 设定 FAB 边框宽度,不明显,需要仔细看。
  • app:elevation:设定 FAB 未按下状态时的阴影,默认是 6dp。
  • app:pressedTranslationZ:设定 FAB 按下状态时候的阴影,默认是 12dp。

在 FAB 中,虽然可以根据 xml 属性来设定 FAB 的样式,还可以通过 Java 代码的形式修改它, FAB 也对这些属性提供了对应的方法,就不对这些设定样式的方法一一介绍了。

2、FAB的一些操作

除了修改样式的方法,FAB 还提供了一些 API 供我们操作它。

  • setOnClickListener : 为 FAB 设定点击事件。
  • show():显示一个 FAB,通过参数可以设定是否需要动画。
  • hide():隐藏一个 FAB,通过参数可以设定是否需要动画。
  • isShow():判断当前 FAB 是否在显示状态。

3、基本使用的 Demo

下面我们定义个 FAB ,并设定一个点击点击的时候,出现一个 SnackBar。然后使用一个按钮,控制 FAB 的显示和隐藏。

运行效果如下:

三、FAB 一些需要知道的点

虽然 FAB 使用起来非常的简单,只要了解一些属性和方法,基本上就可以直接使用了。但是 FAB 也是有一些需要特殊的特性需要知道的,有些就需要从文档中找答案了。

1、配合 SnackBar使用

Material Design 中包含的很多控件,其实是可以配合使用的。Google 推荐 FAB 方在右下角,而 SnackBar 同时也在下方,如果两个控件同时存在的时候,必然有一个会遮挡住另一个。而这个问题 Google 其实已经帮我们考虑好了。

使用 CoordinatorLayout 这个View 作为 FAB 和 SnackBar 的父布局,就可以避免出现这样的问题。CoordinatorLayout 在 Material Design 的作用非常大,有时间再详细介绍,这里只需要知道,为了避免 FAB 和 SnackBar 在布局上冲突,可以使用它。它会在 SnackBar 弹出的时候,将 FAB 上移到一个合适的位置,避免 SnackBar 遮挡它。


有关 SnackBar 的内容,可以参见另外一篇文章:用SnackBar替换掉Toast?看完再决定

2、FAB 可以不可以自定义动画

最上面的效果可以看到,FAB 的 show() 的时候的动画,是一个从小到大放大的效果,hide() 则是相反的,那么我们能不能给它指定一个动画效果呢?

这个就需要我们来查看源码了,就从 show() 方法入手。

可以看到 show() 方法最终会调用 getImpl().show() 去执行具体的显示动作,再继续看 getImpl() 的方法获取的是什么。

FloationgActionButtonImpl 是一个接口,并且为了兼容不同的Android 版本,这里做了一个兼容,对于不同的版本,使用不同的实例来做具体操作,内部源码就不一一看了,有兴趣的可以看看他们的区别,肯定就是一个处理 API 限制的方法。

FAB 的显示和隐藏动画,都是根据不同的 Android 版本各自实现的,它内部已经处理好不同版本的兼容性问题,所以是不是说明没法统一设定动画呢?其实并不是,从源码可以注意到 show() 方法是共有的,所以如果需要设定不同的动画,我们重写 show() 和 hide() 方法即可,再不济我们直接对 FAB 这个 View 进行动画操作,不去调用 FAB 原本提供的方法。

3、FAB 的图标尺寸应该是多少?

既然 FAB 中央可以指定一个图标去显示,那么这个图标的尺寸应该怎么设定。这个问题其实官方已经给了设计文档了。

可以看到,它对 normal 和 mini 样式的 FAB,都提供了不同的样式标准,我们自需要遵照这个标准即可。

四、FAB 设计标准

Material Design 自发布以来,就已经定义了设计的标准。对于 FAB ,同样有一套自己的 UE 设计标准,虽然国内很多 UE 并不参考它,但是我们了解一下对我们也有好处。

这些标准,都可以在官网上找到详细的解释:

https://material.io/guidelines/components/buttons-floating-action-button.html#buttons-floating-action-button-floating-action-button

但是其实总结起来,就几点:

  • 尺寸要按照标准来,不要轻易修改它的样式。
  • 点击和按压的时候,将焦点上的颜色加深,以表示是一个点击。
  • 不要过度使用 FAB ,它应该用于当前页面最主要的操作,每个页面最好只有一个 FAB。
  • FAB 因为太抢眼,最好对其设定一些积极的操作,例如:创建、分享等,避免对其进行一些轻微或破坏性的操作,例如:删除等。
  • 推荐只使用一个 FAB ,如果需要多个操作,可以点击后将它展开以显示更多操作按钮。

五、总结

FAB 其实提供可定制的空间很少,所以一般可以考虑重写个别我们需要的逻辑。或者直接使用一些类似效果的第三方支持库。

下面推荐两个不错的库:

https://github.com/makovkastar/FloatingActionButton

https://github.com/futuresimple/android-floating-action-button

【本文为51CTO专栏作者“张旸”的原创稿件,转载请通过微信公众号联系作者获取授权】

 

戳这里,看该作者更多好文

责任编辑:武晓燕 来源: 51CTO专栏
相关推荐

2024-03-26 00:48:38

Netty通信框架

2021-06-24 09:08:34

Java代码泛型

2020-10-20 18:51:43

C++IDECode

2020-11-04 10:31:29

Jupyter NotPython数据分析

2019-12-26 14:50:36

ORDER BY数据库排序函数

2021-01-03 16:12:35

Java工具开发

2020-01-17 20:00:25

SQL函数数据库

2022-11-29 07:33:15

JavaLombokRecord

2022-07-20 07:29:52

Java

2018-09-27 15:58:06

MySQL数据库性能优化

2012-06-07 16:16:43

JavaScript

2019-06-26 10:10:44

Linux终端命令

2017-03-22 19:52:16

Devops开源

2023-09-26 08:16:25

分布式锁数据库

2016-03-08 10:09:21

Linux开源外壳

2022-06-08 21:08:22

微信朋友圈

2023-02-03 16:07:47

ChatGPTTeams

2023-11-10 08:20:13

2017-11-06 14:55:53

windows文件归纳

2022-02-11 07:33:26

Spring工具库Apache
点赞
收藏

51CTO技术栈公众号