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中控件的讲解将会在持续更新,欢迎关注。

相关文章
|
3月前
|
存储 Java 数据库
Android数据存储:什么是Room Persistence Library?
Android数据存储:什么是Room Persistence Library?
42 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.
656 1
|
8月前
|
Android开发
Android面试常客之Handler全解1
Android面试常客之Handler全解
|
8月前
|
消息中间件 Android开发
Android面试常客之Handler全解2
Android面试常客之Handler全解
|
11月前
|
XML Java 开发工具
Android5.0新特性-Material Design
Android5.0新特性-Material Design
60 0
|
11月前
|
Android开发 开发者 UED
Android Design Support Library初探-更新中
Android Design Support Library初探-更新中
72 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
206 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(二)
60 0
Android Support Design Library之FloatingActionButton(二)
|
Android开发
Android Support库——support annotations
  Android Support库是官方出的支持扩展库,包含了丰富的组件、工具类等,通过在Android SDK Manager中勾选以下两项来获取到。   其中,Android Support Library下载的是对应的源码或jar包,在使用Eclipse时会从这里拷贝出需要的文件到项目中。
944 0
|
3天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库