安卓通知控件SnackBar解析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓通知控件SnackBar解析相关的知识,希望对你有一定的参考价值。
参考技术A Dialog的作用是给用户一个提示信息,并让用户根据提示做出判断。而Dialog的特征就是,它会阻止你原本正在进行的操作,必须停止下来对Dialog进行处理。但是,大多数的人可能并不喜欢这样被打断,也许用户正在处理一项重要的操作,突然弹出一个Dialog遮挡住了他原本的操作,这个时候用户会变得很恼火。因此,使用Dialog的时候还是谨慎一点比较好,尽量不要给用户带来糟糕的体验感。
Toast的作用是告诉用户现在发生了什么事情,不会阻挡用户的操作,但同时用户只能被动接收这个事情,因为没有什么办法来让用户是选择同意还是拒绝。
虽说Toast在用户体验方面要比Dialog好一些,但是也要慎用,尤其是涉及到一些敏感操作的时候。比如说删除数据,只给用户一个提示:“你的数据已被删除”,而不给用户选择是否要删除的机会,这个时候用户可能就要暴走了。
如果说Dialog和Toast是两个极端的话,那么Snackbar就是处于中间的位置了。Snackbar和Toast比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。
Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog。 Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候,使用Toast。 Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。
Snackbar用法
在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖:
dependencies compile 'com.android.support:design:23.4.0'
Snackbar.make(view, "data deleted",Snackbar.LENGTH_LONG) .setAction("Undo", new View.OnClickListener() @Override public void onClick(View v) ) .show();
这里调用Snackbar的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局,用于展示Snackbar。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。
接着这里又调用了一个setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。
短文本
通常 Snackbar 的高度应该仅仅用于容纳所有的文本,而文本应该与执行的操作相关。Snackbar 中不能包含图标,操作只能以文本的形式存在。
最多0-1个操作,不包含取消按钮
当一个动作发生的时候,应当符合提示框和可用性规则。当有2个或者2个以上的操作出现时,应该使用提示框而不是 Snackbar,即使其中的一个是取消操作。如果 Snackbar 中提示的操作重要到需要打断屏幕上正在进行的操作,那么理当使用提示框而非 Snackbar。
以上是引用自google官方文档
另外还有一个特点:
暂时性
为了保证可用性,Snackbar 不应该成为通往核心操作的唯一方式。作为在所有层的上方,Snackbar 不应该持续存在或相互堆叠。
SnackBar提供了很好的交互体验,希望后面大家可以引用它。
安卓Android Support Design Library——Snackbar
介绍:
Snackbar
是Android Support Design Library
库支持的一个控件,用于在界面下面提示一些关键信息,跟Toast不同的地方是SnackBar允许用户向右滑动消除它,同时,也允许在SnackBar中设定一个Action,当用户点击了SnackBar里面的按钮的时候,可以进行一些操作,所以,功能绝对是很强大的。
官方推荐使用CoordinatorLayout(
另一个Android Support Design Library
库支持的控件)容纳。因为使用这个控件,可以保证Snackbar
可以让用户通过向右滑动退出。
由浅入深:
1、基础功能:从底部弹出snackbar
在xml文件中定义snackBar的容器:Coordinator容器:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:onClick="createSnackbar" android:text="Snackbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.design.widget.CoordinatorLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"/> </RelativeLayout>
activity中显示 Snackbar(它的用法与Toast很像,它出现后三秒之后从底部弹出,或者用户 向右滑动,它被滑出)
public class SnackbarTest extends AppCompatActivity { CoordinatorLayout container; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_snackbar_test); container = (CoordinatorLayout) findViewById(R.id.container); } public void createSnackbar(View v){ Snackbar.make(container,"Snackbar maker", Snackbar.LENGTH_LONG).show(); } }
Snackbar的第一个容器参数也可以是 LinearLayout或其他容器,当Snackbar弹出时,没有向右滑出效果。
2、添加按钮,并定义点击事件
Snackbar.make(container,"Snackbar with button",Snackbar.LENGTH_LONG)
.setAction("action", new View.OnClickListener() {
@Override
public void onClick(View v) {
//
}
})
.setActionTextColor(Color.RED)
.show();
3、设置Snackbar回调 onshow 和 onDismissed
自定义 Snackbar.Callback 类
public class MyCallback extends Snackbar.Callback{ @Override public void onDismissed(Snackbar transientBottomBar, int event) { super.onDismissed(transientBottomBar, event); if(event == DISMISS_EVENT_SWIPE || event == DISMISS_EVENT_TIMEOUT || event == DISMISS_EVENT_CONSECUTIVE){ } } @Override public void onShown(Snackbar sb) { super.onShown(sb); // } }
Snackbar设置callBack()
Snackbar.make(container,"Snackbar maker", Snackbar.LENGTH_LONG) .setCallback(new MyCallback()) .show();
补充Snackbar消失的类型:
/** Indicates that the Snackbar was dismissed via a swipe.*/ public static final int DISMISS_EVENT_SWIPE = 0; /** Indicates that the Snackbar was dismissed via an action click.*/ public static final int DISMISS_EVENT_ACTION = 1; /** Indicates that the Snackbar was dismissed via a timeout.*/ public static final int DISMISS_EVENT_TIMEOUT = 2; /** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/ public static final int DISMISS_EVENT_MANUAL = 3; /** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/ public static final int DISMISS_EVENT_CONSECUTIVE = 4;
后续查看补充:
http://www.jianshu.com/p/cd1e80e64311
Coordinator 容器:
http://www.jianshu.com/p/488283f74e69
http://www.cnblogs.com/itgungnir/p/6210803.html
以上是关于安卓通知控件SnackBar解析的主要内容,如果未能解决你的问题,请参考以下文章
安卓Android Support Design Library——Snackbar
Android Material Design控件使用——CardView和SnackBar使用