Android Design Support Library全解:Part 2 Snackbar

简介: Android Design Support Library系列第2弹: Snackbar“Providing lightweight, quick feedback about an operation is a perfect opportunity to use a snackbar.

Android Design Support Library系列第2弹: Snackbar
“Providing lightweight, quick feedback about an operation is a perfect opportunity to use a snackbar.”

image.png

SnackBar是Design Support Library中很实用的控件,它可以在屏幕的底部展示快速消息,功能类似于Toast,但更加灵活和强大:

  • SnackBar会在交互或者超时之后自动消失;
  • SnackBar可以包含一个Action动作,来触发事件;
  • SnackBar所展示的信息是UI的界面的一部分,它将出现于所有页面元素的之下,而Toast的是覆盖UI界面;
  • 统一时间内,只会显示一条SnackBar

因为SnackBar和Toast的功能相近,所以SnackBar继承了很多Toast的属性和方法,比如标识显示时间长短的LENGTH_LONG and LENGTH_SHORT

使用方法

SnackBar的使用方法大致如下:

Snackbar.make(view, message, duration)
        .setAction(action message, click listener)
        .show();

其中:

  • make() – 创建SnackBar来显示信息;
  • setAction() – 设置Action事件;
  • show() – 显示SnackBar;

需要说明的参数:

  • make方法的第一个参数view,代表着SnackBar所要依附的父视图(parent view);
  • make方法的最后一个参数duration,代表着SnackBar出现的时间,超过该时间之后便会消失。

下面我们看一个实例:

Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_SHORT)
       .setAction("Undo", new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               // 点击事件
           }
       })
       .show();

其中,rootlayout上一节中,包含FABframelayout,点击悬浮按钮就会弹出Snackbar

Snackbar-framelayout

虽然Snackbar出现了,但是和我们预期的还是有差距,我们希望Snarkbar出现在最下方时,FAB等控件可以随之上移,比如下面的效果:

Snackbar-with-CoordinatorLayout

这就需要配合CoordinatorLayout 控件来使用,我们会在后续的篇章里介绍。

自定义Snackbar样式

虽然可以通过setActionTextColor方法来设置Action字体样式,但是在实际的使用中,往往需要让Snackbar显示出不同的样式(字体和颜色)来体现出不同的意义。
如何为Snackbar添加背景颜色

你可以通过getView() 方法获取Snackbar所在的View,然后就可以在对它采用任意的背景颜色:snackbar.getView().setBackgroundColor(colorId);

下面是ColoredSnackbar类,它利用装饰器模式封装了一些方法,可以根据用户指定的类型显示不同背景颜色。

//彩色
public class ColoredSnackbar {
    //红色
    private static final int red = 0xfff44336;
    //绿色
    private static final int green = 0xff4caf50;
    //蓝色
    private static final int blue = 0xff2195f3;
    //橙色
    private static final int orange = 0xffffc107;
 
    //获得当前SnackBar所在的View
    private static View getSnackBarLayout(Snackbar snackbar) {
        if (snackbar != null) {
            return snackbar.getView();
        }
        return null;
    }
 
    //装饰器
    private static Snackbar colorSnackBar(Snackbar snackbar, int colorId) {
        View snackBarView = getSnackBarLayout(snackbar);
        if (snackBarView != null) {
            snackBarView.setBackgroundColor(colorId);
        }
 
        return snackbar;
    }
 
    //使用蓝色表示一般信息
    public static Snackbar info(Snackbar snackbar) {
        return colorSnackBar(snackbar, blue);
    }
 
    //使用橙色表示提醒信息
    public static Snackbar warning(Snackbar snackbar) {
        return colorSnackBar(snackbar, orange);
    }
 
    //使用红色表示警告信息
    public static Snackbar alert(Snackbar snackbar) {
        return colorSnackBar(snackbar, red);
    }
 
    //使用绿色表示确认信息
    public static Snackbar confirm(Snackbar snackbar) {
        return colorSnackBar(snackbar, green);
    }
}

其使用方式很简单,先构建正常的SnackBar,然后调用ColoredSnackBar进行装饰:

Snackbar snackbar = Snackbar.make(getView(), R.string.hello_snackbar, Snackbar.LENGTH_SHORT);
ColoredSnackBar.alert(snackbar).show();

效果如下:

ColoredSnackBar

更多关于Design Support Library中控件的讲解将会在持续更新,欢迎关注。

相关文章
|
2月前
|
存储 Java 数据库
Android数据存储:什么是Room Persistence Library?
Android数据存储:什么是Room Persistence Library?
71 0
|
Android开发
IDEA编译gradle提示This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2020.3.1 or newer.
IDEA编译gradle提示This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project, please retry with version 2020.3.1 or newer.
772 1
|
11月前
|
Android开发
Android面试常客之Handler全解1
Android面试常客之Handler全解
|
11月前
|
消息中间件 Android开发
Android面试常客之Handler全解2
Android面试常客之Handler全解
|
Android开发 开发者 UED
Android Design Support Library初探-更新中
Android Design Support Library初探-更新中
79 0
|
XML Java 开发工具
Android5.0新特性-Material Design
Android5.0新特性-Material Design
69 0
|
Android开发
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
277 0
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.74
|
开发工具 Android开发
Android Support Design Library之FloatingActionButton(二)
Android Support Design Library之FloatingActionButton(二)
65 0
Android Support Design Library之FloatingActionButton(二)
|
Android开发
Android 快别用Toast了,来试试Snackbar
🔥 应用场景 🔥 源码 💥 Toast.setGravity() 💥 Toast.isSystemRenderedTextToast() 🔥 Toast 提供的方法 💥 Toast.setView() 源码 🔥 Snackbar 💥 代码实现 💥 效果 💥 工具类
980 0
Android 快别用Toast了,来试试Snackbar
|
3天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的深度对比
在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文旨在通过数据驱动的分析方法,深入探讨这两大操作系统在开发环境、用户界面设计及市场表现等方面的差异。引用最新的行业报告和科研数据,结合技术专家的观点,本文将提供对开发者和市场分析师均有价值的洞见。