Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android Material Design系列之FloatingActionButton和Snackbar

Android Material Design系列之FloatingActionButton和Snackbar

作者头像
非著名程序员
发布于 2018-02-02 07:00:44
发布于 2018-02-02 07:00:44
2.2K00
代码可运行
举报
文章被收录于专栏:非著名程序员非著名程序员
运行总次数:0
代码可运行

今天主讲的Material Design系列的两个控件都不难,所以一起讲了,分别是FloatingActionButton和Snackbar。这个系列都是主讲的Material Design风格的控件,所以都是控件的一些基本使用,也会扩展讲一些与这个控件相关的东西和效果,如果都会了的同学,可以不看这个系列。当然看一下也没啥,再巩固一下知识点也挺好的。

FloatingActionButton

FloatingActionButton从本质讲就是一个ImageView,从FloatingActionButton的继承来看,它首先继承了ImageButton,然后是ImageButton继承了ImageView。所以FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性。FloatingActionButton顾名思义就是一个浮动按钮。

FloatingActionButton属性介绍

由于FloatingActionButton本质上是ImageView,跟ImageView相关的就不介绍,这里重点介绍新加的几个属性。

  • app:fabSize :FloatingActionButton的大小,有两种赋值分别是 “mini” 和 “normal”,默认是“normal”.
  • app:backgroundTint:FloatingActionButton默认正常显示时的背景颜色
  • app:elevation :FloatingActionButton阴影的深度,默认时的阴影
  • app:rippleColor:FloatingActionButton点击时的背景颜色
  • app:pressedTranslationZ:FloatingActionButton点击时阴影的深度
例子效果图

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/add"
        app:backgroundTint="@color/add_bg_color"
        app:elevation="6dp"
        app:rippleColor="@color/add_selected_color"
        app:pressedTranslationZ="25dp"
        app:fabSize="normal"/>

掌握了我给你们说的那几个属性,就基本掌握了FloatingActionButton的用法了。FloatingActionButton之所以出现这么久了,不太火,不太常用,估计跟他悬浮有关,容易挡住其他内容。那我们现在就研究改如何在滑动列表时隐藏和显示这个悬浮按钮FloatingActionButton。

FloatingActionButton显示与隐藏

那如何实现滑动列表时,下滑显示和上滑隐藏的效果呢?其实很简单,官方也提供了方法,但是得继承FloatingActionButton.Behavior进行重写。在这里我为了实现这个效果,给布局添加了一个RecyclerView,方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by loonggg on 2016/6/22.
 */
public class FloatingActionButtonScrollBehavior extends FloatingActionButton.Behavior {
    public FloatingActionButtonScrollBehavior(Context context, AttributeSet attrs) {
        super();
    }

    @Override
    public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final
    FloatingActionButton child, final View directTargetChild, final View target, final int
            nestedScrollAxes) {
        // 确保是竖直判断的滚动
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll
                (coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
    }

    @Override
    public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final
    FloatingActionButton child, final View target, final int dxConsumed, final int dyConsumed,
                               final int dxUnconsumed, final int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
                dxUnconsumed, dyUnconsumed);
        if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
            child.hide();
        } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
            child.show();
        }
    }
}

看动画效果,如下:

其实我感觉你们可以还会想说,点击一下这个悬浮按钮,动画弹出多个按钮这个效果怎么实现,这里我就不讲了,github上有太多跟这个相关的例子了。 可以参考这个例子: https://github.com/Clans/FloatingActionButton

Snackbar

Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈。

它的使用方式也是非常的简单,跟Toast差不多,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final Snackbar snackbar = Snackbar.make(view, "关注非著名程序员公众号了吗?", Snackbar
        .LENGTH_LONG);
snackbar.show();
snackbar.setAction("关注", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
                        snackbar.dismiss();
    }
});

效果图如下:

Snackbar样式

如何修改Snackbar样式呢?其实也非常简单。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final Snackbar snackbar = Snackbar.make(rv, "你知道非著名程序员这个公众号吗?", Snackbar
                        .LENGTH_LONG);
// 设置动作按钮颜色
snackbar.setActionTextColor(getResources().getColor(R.color.add_bg_color));
// 获取 snackbar 视图
View snackbarView = snackbar.getView();

//设置修改snackbar文本颜色
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView tv = (TextView) snackbarView.findViewById(snackbarTextId);
tv.setTextColor(getResources().getColor(R.color.add_bg_color));
//设置snackbar背景色
snackbarView.setBackgroundColor(Color.GRAY);
snackbar.show();
snackbar.setAction("知道", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        snackbar.dismiss();
    }
});

效果图如下:

添加icon和改变Snackbar的位置

修改了背景色,文字按钮颜色,是不是还不过瘾?看看我们如何在Snackbar上添加上一个icon图片。其实也非常简单,和修改样式的过程差不多。代码如下:

  • 添加icon View snackbarView = snackbar.getView(); //设置iconImageView iconImage = new ImageView(MainActivity.this); iconImage.setImageResource(R.mipmap.ic_launcher);//icon插入布局Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbarView; Snackbar.SnackbarLayout.LayoutParams sl = new Snackbar.SnackbarLayout.LayoutParams(vl.WRAP_CONTENT, vl.WRAP_CONTENT);//让icon的布局位于父布局垂直居中的位置sl.gravity = Gravity.CENTER_VERTICAL; iconImage.setLayoutParams(sl); snackbarLayout.addView(iconImage, 0);
  • 改变Snackbar的位置 其实改变Snackbar的位置和设置icon的位置布局大同小异,代码如下: // 获取 snackbar 视图 View snackbarView = snackbar.getView(); ViewGroup.LayoutParams vl = snackbarView.getLayoutParams(); CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width, vl.height); cl.gravity = Gravity.CENTER_VERTICAL; snackbarView.setLayoutParams(cl);
  • 效果图如下:

到这里,关于FloatingActionButton和Snackbar基本就讲完了。非常简单,我相信大家都很容易理解。Material Design系列一发出去的时候,有人私下发消息要源码,前期我感觉没必要,以为都是控件的基本使用嘛,挡不住我心好啊,这个系列我都写在了一个demo里,我会慢慢完善,直到更新完。

demo的github地址:https://github.com/loonggg/MaterialDesignDemo 去star吧,我会慢慢完善的。

MaterialDesign系列文章推荐:

Android Material Design系列之Navigation Drawer(可点击)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一篇博客让你了解Material Design的使用
Material Design是Google设计的一套视觉语言,将优先的经典的设计原理与科技创新相结合,为开发者提供一套完成视觉和交互设计规范。移动设备是这套设计语言的基础对象,让用户在不同的平台、不同尺寸的设备上能保持一致的体验。 Material Design强调交互上的即时反馈,即对于用户的触控等行为app需要给出即时的反应。同时Material Design要求应用给用户带入感,让用户在使用时是沉浸在当前的应用当中。例如Google给出了沉浸式状态栏等“工具”,希望通过改变StatusBar和NavigationBar来给用户更强的融入感,专注于应用本身提供的内容。 Google从动画、颜色、样式、触控反馈、布局等多个方面给出了Material Design的设计要求。无论是单一的控件还是图文布局,Google都给出了明确的设计说明,有兴趣的同学可以去上方提到的官方链接处做进一步了解。
老马的编程之旅
2022/06/22
3.6K0
Android--CoordinatorLayout基本使用
CoordinatorLayout是在desgin包下的一个用于协调子控件的组件,可以解决绝大部分滑动联动问题,使用方法也很简单,为观察者注册一个Behavior,在Behavior指定要监听的控件(
aruba
2020/07/03
1.1K0
Android--CoordinatorLayout基本使用
轻量级控件SnackBar使用以及源码分析
本篇博客将会给大家带来一个轻量级控件SnackBar,为什么要讲SnackBar?Snackbar:的提出实际上是界于Toast和Dialog的中间产物。因为Toast与Dialog各有一定的不足,使用Toast的时候, 用户无法交互;使用Dialog:用户可以交互,但是体验会打折扣,会阻断用户的连贯性操作;但是使用Snackbar既可以做到轻量级的用户提醒效果,又可以有交互的功能,本博客将会从SnackBar的使用和源码分析两个方面进行介绍。
老马的编程之旅
2022/06/22
1.5K0
轻量级控件SnackBar使用以及源码分析
Material Design 实战 之第三弹—— 悬浮按钮和可交互提示
下面开始来具体实现。首先仍然需要提前准备好一个图标,这里放置了一张ic_done.png到drawable-xxhdpi目录下。然后修改activity-mam.xml中的代码,如下所示:
凌川江雪
2018/10/09
1.9K0
Material Design 实战 之第三弹—— 悬浮按钮和可交互提示
自定义Behavior —— 仿知乎,FloatActionButton隐藏与展示
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/53453958
程序员徐公
2018/09/18
1.1K0
自定义Behavior —— 仿知乎,FloatActionButton隐藏与展示
针对 CoordinatorLayout 及 Behavior 的一次细节较真
我一直对 Material Design 很感兴趣,每次在官网上阅读它的相关文档时,我总会有更进一步的体会。当然,Material Design 并不是仅仅针对 Android 而言的,它其实是一套普遍性的设计规范。而对于 Android 开发人员而言,我们涉及的往往是它的实现。也就是一个个个性鲜明的类。比如 RecyclerView 、CardView、Palette 等等。并且为了让开发者更轻松地开发出符合 Material Design 设计规范的界面,Google 开发人员直接提供了一个兼容包,它就是 Android Support Design Library。
Frank909
2019/01/14
1.3K0
Android材料设计之FloatingActionButton+Snackbar+SheetX3
本文把几个小东西讲一下 FloatingActionButton:浮动按钮 Snackbar:底弹框 BottomSheet:底抽屉 BottomSheetDialog :抽屉对话框 Bot
张风捷特烈
2018/12/19
1K0
CoordinatorLayout与滚动的处理
本博文专门讲解和CoordinatorLayout相关的知识点,这也是Design Support Library中最重要与最难的部分。
小小工匠
2021/08/16
9340
MaterialDesign之FloatingActionButton
就是上面这样了,忘说了一件很重要的事情……FloatingActionButton的监听就是最原始的监听!!!接下来到了重头戏了
蜻蜓队长
2018/08/03
7460
MaterialDesign之FloatingActionButton
Material Design系列探究之LinearLayoutCompat
谷歌Material Design推出了许多非常好用的控件,所以我决定写一个专题来讲述MaterialDesign,今天带来Material Design系列的第一弹 LinearLayoutCompat。
老马的编程之旅
2022/06/22
9300
Material Design系列探究之LinearLayoutCompat
Floating Action Button-Android M新控件
浮动操作按钮 (简称 FAB) 是: “一个特殊的promoted操作案例。因为一个浮动在UI之上的圆形图标而显得格外突出,同时它还具有特殊的手势行为”
小小工匠
2021/08/16
1.6K0
嵌套滑动通用解决方案--NestedScrollingParent2
京东首页 这是京东的首页,忽略顶部和顶部,大致理解视图结构就是:最外层为多布局的RecyclerView,最后一个item是tabLayout+ViewPager,ViewPager的每个fragment内也是RecyclerView。这是电商App首页常用的布局方式。
胡飞洋
2020/07/23
3.9K0
嵌套滑动通用解决方案--NestedScrollingParent2
Material Design技术分享
  因项目需要接触了近一个月的Material Design,之前只觉得它美丽而神秘,真正接触起来发现确实不错。针对这段时间做个小总结,也给广大战友们分享点踩坑的经验。第一部分是针对Material Design的个人总结,第二部分是近段时间接触到符合Material Design风格的控件以及动画总结。 Part1:什么是Material design   自2014年谷歌在I/O大会发布Material Design,至今已经两年多,其遵循纸片与墨水的视觉设计,并将物理运动带入到UI设计中,google
QQ音乐技术团队
2018/01/30
2.3K0
Material Design技术分享
Android材料设计之Behavior攻坚战
接触目标view时才会回调:onStartNestedScroll 加了layout_behavior的View是child
张风捷特烈
2018/12/21
1.3K0
Android Material Design系列之Toolbar
今天我们主要讲Toolbar的使用,我们都知道Toolbar是在Android 5.0以后推出来的,之前都是ActionBar这个控件。我相信虽然谷歌在3.0以后推出了ActionBar,但是用的人肯定很少,因为个人认为它比较恶心。而且Android对ActionBar的界定很模糊,Toolbar和ActionBar在外观上并没有太大的区别,只是说Toolbar更加自由了,而不像ActionBar那样有太多系统定制的条条框框。 Toolbar包含哪些元素呢 一个Toolbar包含哪些元素呢?通过我们看API
非著名程序员
2018/02/02
9210
Android Material Design系列之Toolbar
CoordinatorLayout使用(三):NestedScrollView & 嵌套滑动事件
上一篇,我们大体理解了 Behavior流程 和 事件流 具体代码可以见 https://github.com/2954722256/use_little_demo 对应 coordinator 的 Module
dodo_lihao
2018/09/12
10.9K1
CoordinatorLayout使用(三):NestedScrollView & 嵌套滑动事件
一步步带你读懂 CoordinatorLayout 源码
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/71616547
程序员徐公
2018/09/17
7180
一步步带你读懂 CoordinatorLayout 源码
Android开发笔记(一百三十七)自定义行为Behavior
协调布局CoordinatorLayout能够让内部的子控件互相配合着移动,这跟以往孤立的控件运动截然不同,协调运动的结果,意味着App画面更加流畅、自然,也更符合日常生活中的动作场景。如果你对CoordinatorLayout的用法还不太了解的话,建议先浏览这篇博文熟悉一下《Android开发笔记(一百三十四)协调布局CoordinatorLayout》。 一般我们使用CoordinatorLayout,都是结合悬浮按钮FloatingActionButton、应用栏布局AppBarLayout或者可折叠工具栏布局CollapsingToolbarLayout,但这不表示CoordinatorLayout只能与这少数几个控件一起使用,事实上,只要定义了两个控件之间的互动行为,即使是TextView、ImageView这些普通控件,也能实现自动协调运动的效果。先上个图,说明一下自定义行为所支持的画面:
aqi00
2019/01/18
1.3K0
相关推荐
一篇博客让你了解Material Design的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验