Android-Snackbar用法及源码分析

来源:互联网 发布:知科地方门户网站系统 编辑:程序博客网 时间:2024/05/18 01:48


Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈。

有时我们想这样一种控件,我们想他可以想Toast一样显示完成便可以消失,又想在这个信息提示上进行用户反馈。写Toast没有反馈效果,写Dialog只能点击去dismiss它,Snackbar完全可以达到这样的需求。

在谷歌提出 material design 之后,终于推出了 android.support.design 这个官方的material design库,这几天我也简单浏览了下这个库,基本上我们常用的组件都有了,今天的主角Snackbar就在这个库中,因此要想使用SnackBar,首先我们就要引入这个库。

引入这个库的方法很简单,首先找到你app的build gradle文件,引入如下代码:

compile 'com.android.support:design:22.2.0'

如下:


然后点击文件左上方的Sync Now按钮如下:

这时再输入Snackbar,如下:


也就是我们可以使用Snackbar了,可以通过一个简单的实例来认识一下Snackbar,代码如下:

public class MainActivity extends AppCompatActivity {
   private TextView tv;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       
setContentView(R.layout.activity_main);
       
tv = (TextView) this.findViewById(R.id.tv);
       
tv.setOnClickListener(new View.OnClickListener() {
           @Override
           
public void onClick(View v) {
               Snackbar.make(tv, "this is message to show", Snackbar.LENGTH_LONG).
               setAction("click", new View.OnClickListener() {
                   @Override
                   
public void onClick(View v) {
                       tv.setText("click over");
                   
}
               }).show();

           
}
       });
   
}
}

创建一个Snackbar需要调用其make方法,传入三个参数,第一个是view,第二个是要显示的信息,第三个是Snackbar显示的时间,其源码如下:

public static Snackbar make(View view, CharSequence text, int duration) {
   Snackbar snackbar = new Snackbar(findSuitableParent(view));
   
snackbar.setText(text);
   
snackbar.setDuration(duration);
   return
snackbar;
}

为Snackbar添加一个点击事件的响应,可以调用setAction方法,传入两个参数,第一个是Action的提示内容,第二个是单击事件的监听,其源码如下:

public Snackbar setAction(CharSequence text, final OnClickListener listener) {
   TextView tv = this.mView.getActionView();//创建一个TextView响应Action事件
   if
(!TextUtils.isEmpty(text) && listener != null) {
       tv.setVisibility(0);//0表示显示
       
tv.setText(text);//设置显示信息
       
tv.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               listener.onClick(view);//为这个TextView设置单击事件监听
               
Snackbar.this.dismiss();//这个TextView被点击后Snackbar隐藏
           
}
       });
   
} else {
       tv.setVisibility(8);//表示不可见,并不占空间;4表示不可见,但占原来的空间
       
tv.setOnClickListener((OnClickListener)null);
   
}

   return this;
}

从源码可以看出来,点击Snackbar的Action按钮之后,Snackbar调用了其dismiss方法,隐藏Snackbar。

最后不要忘记调用show方法显示Snackbar,其源码如下:

public void show() {
   SnackbarManager.getInstance().show(this.mDuration, this.mManagerCallback);
}

运行实例如下:

谢谢关注我的微信公众号,觉得好可以分享到朋友圈哦.

请关注我的新浪微博:AndroidTip

CSDN博客:http://blog.csdn.net/yayun0516

0 0