1.简介
Snackbar 它是Toast的子类。主要用来提示短暂的提示信息后,然后它自动消失。
它寄生在普通view上,具有一些基本功能。
它寄生在 CoordinatorLayout 时,有以下两个特性:
a.可以通过swipe手势关闭它。
b.当它显示时,layout自动移动其它view,以提供足够空间显示Snackbar.
implementation 'com.google.android.material:material:1.1.0-alpha09'
2.如何显示Snackbar
2.1 使用 Use a CoordinatorLayout
snackbar会在指定的view继承层次中向上找 到最近的CoordinatorLayout或者有content view的窗口。
如果想在某个layout内显示snackbar,需要把它放入CoordinatorLayout中,它是FrameLayout子类。FrameLayout可以直接用它替换,其它layout要把它放入CoordinatorLayout中,如下:
1 <android.support.design.widget.CoordinatorLayout 2 android:id="@+id/myCoordinatorLayout" 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent"> 7 8 <!-- Here are the existing layout elements, now wrapped in 9 a CoordinatorLayout --> 10 <LinearLayout 11 android:layout_width="match_parent" 12 android:layout_height="match_parent" 13 android:orientation="vertical"> 14 15 <!-- …Toolbar, other layouts, other elements… --> 16 17 </LinearLayout> 18 19 </android.support.design.widget.CoordinatorLayout>
下面就是区别:注意图中下面黑色的区域。
2.2 创建Snackbar
Snackbar mySnackbar = Snackbar.make(viewId, stringId, duration);
2.3 显示Snackbar
注意,系统中同时只能显示一个snackbar
mySnackbar.show();
3.给Snackbar添加一个action
代码如下:
1 Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout), 2 R.string.email_archived, Snackbar.LENGTH_SHORT); 3 mySnackbar.setAction(R.string.undo_string, new MyUndoListener()); 4 mySnackbar.show();
1 public class MyUndoListener implements View.OnClickListener{ 2 3 &Override 4 public void onClick(View v) { 5 6 // Code to undo the user's last action 7 } 8 }