Google在2015 I/O大会上,给我们带来了更加详细的Material Design规范,同时也引入了Android Design Support Library,为我们提供了基于Material设计规范的控件。它兼容性广,能兼容到android 2.1(按Google官方数据,兼容android 2.3以上即可覆盖当前市面上所有Android设备),并且高度封装,使用简洁,可谓业界良心之作。

与Dialog及Toast的异同

在与用户的交互过程中,有时我们需要给用户一些提示信息,甚至可能提供一些操作的选择。通常,我们会使用Dialog或Toast来进行这种提示。这两种提示各有特点,但却似乎都在各自的特点上走了极端。

Dialog的特点是,它弹出来的时候会中断用户当前的操作,直到这个Dialog被处理。它除了向用户提供一些信息之外,也可能包含一些操作,通常用于必须打断用户的提示,比如当用户进行清空数据等重要操作时进行二次确认的提示。

Toast则是走了另外一个极端。它用于向用户提供少量的信息展示,并且不会中断用户当前的操作,这样在与用户的交互过程中也不会显得唐突。但它也只能用于展示少量信息,不能向用户提供一些操作选择。

而在Android Design Support Library中,谷歌为我们引入了Snackbar,它使用简单,与Toast相似,并且吸收了Dialog与Toast各自的优点,而避免了它们设计上的不足。它在界面的底部向用户展示少量信息,并且可以向用户提供一种轻量级的反馈操作,如下图:



在这个例子中,原先对于未验证的车牌是点击后直接跳到车牌列表的界面并提示去验证,但显然提示用户未验证并给出“去验证”的操作建议会更加友好。

快速使用

Snackbar的使用很简单,接口与Toast相似。像上面的图中的例子,代码如下:

Snackbar.make(view, "需要验证该车牌才能使用该功能", Snackbar.LENGTH_LONG)
.setAction("去验证", new View.OnClickListener() {
@Override
public void onClick(View view) {
Activities.to(getActivity(), VehicleListActivity.class);
}
}).show();

接口介绍

Snackbar向我们提供了以下相关的接口:

  • static Snackbar make(View view, int resId, int duration)static Snackbar make(View view, CharSequence text, int duration):用于创建一个Snackbar,参数如下:

    • view:用于找到合适的parent的view,以把自己添加上去
    • resIdtext:展示的信息
    • duration:展示的时间,参数值如下:
      • LENGTH_LONG 显示2750毫秒
      • LENGTH_SHORT 显示1500毫秒
      • LENGTH_INDEFINITE 一直展示,直到它被dismiss掉,或者是下一个Snackbar被显示时。
  • setText(int resId)setText(CharSequence message):更新Snackbar上的提示消息。
  • setAction(int resId, View.OnClickListener listener)setAction(CharSequence text, View.OnClickListener listener):设置显示到Snackbar上的操作。
  • setActionTextColor(ColorStateList colors)setActionTextColor(int color):设置操作的文本颜色。
  • setDuration(int duration)getDuration():设置及获取显示的时间
  • show()dismiss()isShown():显示、隐藏Snackbar,以及判断当前Snackbar是否正在被显示。
  • setCallback(Snackbar.Callback callback):设置当前Snackbar可见性变化时的回调

Snackbar提供的接口非常简单并且易于理解,需要注意的是,与Toast不同,当新的Snackbar被显示时,会先隐藏掉上一个Snackbar然后显示新的Snackbar,而不像Toast那样等前面的Toast显示完毕才显示。

一些技巧

设置消息的文本颜色

Snackbar并没有提供设置消息文本颜色的API。通过定位到它的布局代码,我们可以看到它是通过一个style来配置:

android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"

该style对应源码:

  <style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance">
<item name="android:textSize">@dimen/design_snackbar_text_size</item>
<item name="android:textColor">?android:textColorPrimary</item>
</style>

可见其颜色读的是theme中的android:textColorPrimary的值。但是如果我们想要修改它的颜色的话,配置android:textColorPrimary是无效的,我们要配置的是theme里面的android:textColor

然后可能有一个问题,通常我们会在theme里使用这个属性为整个应用配置默认的文本颜色,比如在我公司的项目里,就使用#333来作业默认的黑色文本,这样就使得Snackbar的提示消息看不见(Snackbar的背景色是#ff303030)。这种情况下只能使用比较hack的方式来修改它的颜色值了。我试过覆盖它的style定义,但是未能成功。最后是通过getView()接口获取到SnackbarLayout,再拿到里面的TextView来修改其文本颜色,代码如下:

((TextView)snackbar.getView().findViewById(android.support.design.R.id.snackbar_text)).setTextColor(Color.WHITE);

滑动删除的Snackbar

当Snackbar与CoordinatorLayout一起使用时,即Snackbar显示在CoordinatorLayout里面时,可以通过在Snackbar上右滑的操作把当前的Snackbar隐藏掉,即我们在调用Snackbar.make(…)方法时,传入的View应该为CoordinatorLayout或CoordinatorLayout的子view。

另外Snackbar与FloatingActionButton如果都在CoordinatorLayout内时,Snackbar展示时FloatingActionButton会跟着上移,而不会出现互相遮挡的情况。

Android Design Support Library使用详解——Snackbar的更多相关文章

  1. Android Design Support Library使用详解

    Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...

  2. Android Design Support Library使用详解——TextInputLayout与TextInputEditText

    TextInputLayout 在谷歌的Material Design中,文本输入是这样表现的:当用户点击输入框想要输入文字时,如果输入框是空的,那么它的提示文字(hint)就会变小并且同时移动到输入 ...

  3. Android Design Support Library初探,NavigationView实践

    前言 在前几天的IO大会上,Google带来了Android M,同时还有Android支持库的新一轮更新,其中更是增加一个全新的支持库Android Design Support Library,包 ...

  4. Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠

    此文的代码在Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果代码的基础上进行修改,如果你没有看过本系列的第一篇文章最好先看一看.Co ...

  5. Android开发学习之路-Android Design Support Library使用(CoordinatorLayout的使用)

    效果图: 上面的这个图有两个效果是,一个是顶部的图片,在上滑之后会隐藏起来并且显示出一个ToolBar(ToolBar类似于ActionBar,但是只有ToolBar是兼容Material Desig ...

  6. 【转】【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

    转自:http://mrfufufu.github.io/android/2015/07/01/Codelab_Android_Design_Support_Library.html [翻]Andro ...

  7. Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏

    原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fanc ...

  8. Codelab for Android Design Support Library used in I/O Rewind Bangkok session

    At the moment I believe that there is no any Android Developer who doesn't know about Material Desig ...

  9. Android Design Support Library: 学习CoordinatorLayout

    简述 CoordinatorLayout字面意思是"协调器布局",它是Design Support Library中提供的一个超级帧布局,帮助我们实现Material Design ...

随机推荐

  1. js的处理技巧

    目前来说,处理js有两种方法: 1,通过第三方工具执行js脚本, selenium,会驱动浏览器把js全部加载出来并返回. 2,手动模拟js的执行 2.1)找到js链接,可以在idle中用print( ...

  2. 使用requirejs来管理angularJS依赖示例

    有关requirejs是什么在这里不做解释,只用纯代码实战让你感受requirejs依赖管理的强大. 一.首先要先下载require.js,然后整一个入口文件main.js包括了对其他js的引用. / ...

  3. js面向对象之公有、私有、静态属性和方法详解

    现下,javascript大行其道,对于网站开发人员来说,javascript是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人对于原生javascript缺乏深入的理解,习惯了函数式 ...

  4. JS点击按钮打开新的独立页面

    工作中遇到需要点击按钮弹出一个独立的页面,并显示指定内容的问题,查了一些资料后,得到以下方法: window.open('locationPage.html', '_blank', 'height=1 ...

  5. vi/vim下tab的长度修改

    默认下的长度是8,如果要想修改可以在根目录下新建'.vimrc'文件 里面的内容是: [root@localhost 09:06 ~]# cat .vimrc set tabstop=4 set sh ...

  6. cogs 558 奇怪的函数

    提交地址:http://cojs.tk/cogs/problem/problem.php?pid=558 558. 奇怪的函数 ★☆   输入文件:xx.in   输出文件:xx.out   简单对比 ...

  7. 【BZOJ3233】【tyvj1729】文艺平衡树

    原题传送门 解题思路:裸平衡树操作,支持区间翻转即可,这里写了无旋treap. 其实平衡树的区间操作就和线段树差不多,你用个标记搞一下就好了,,,,, #include <stdio.h> ...

  8. ●UVA 1608 Non-boring sequences

    题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...

  9. ●BOZJ 1927 [Sdoi2010]星际竞速

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1927 题解: 显然是个DAG 建图和有向图最小路径覆盖的建图有些相似. 都是拆点为 u u' ...

  10. ●POJ 2125 Destroying The Graph

    题链: http://poj.org/problem?id=2125 题解: 最小割 + 输出割方案.建图:拆点,每个题拆为 i 和 i'分别表示其的入点和出点建立超源 S和超汇 T.S -> ...