巧用Snackbar代替Toast

来源:互联网 发布:mac如何设置用户头像 编辑:程序博客网 时间:2024/05/23 02:03

SnackBar是 Android Support Library 22.2.0 里面新增提供的一个控件,可以把它理解成一个加强版的Toast,或者是一个轻量级的Dialog。SnackBar默认从屏幕底部弹出,像Toast一样会自动消失,当然也可以手动划出屏幕消失。Toast是不能交互的,而如果需要,SnackBar默认是可以添加一个点击事件的。官方也是推荐使用Snackbar代替Toast,你的项目中还在用Toast吗?不妨试试炫酷的SnackBar!


snackbar.gif

Snackbar的用法几乎和Toast一毛一样:

Toast这么写:

Toast.makeText(context, "it is Toast", Toast.LENGTH_SHORT).show();

Snackbar这么写:

Snackbar.make(view, "it is Snackbar", Snackbar.LENGTH_SHORT).show();

二者都有三个参数,区别就在于第一个参数,其中Toast传入的是Context,而Snackbar传入的是View。Context已无需多讲,而Snackbar的参数中传入一个View是几个意思呢?先说下Toast吧,其实Toast是个系统级窗口,相当于悬浮在所有View的上面。而SnackBar却不是这样,它需要有一个View来承载,SnackBar会遍历整个View Tree来找到一个合适的View承载SnackBar的View,如果你想要实现上面的动画交互效果的话最好是传入CoordinatorLayout对象,而如果传入RelativeLayout或者LinearLayout是不会有动画效果的。那CoordinatorLayout是个什么玩意呢?以后有机会再专门介绍吧,这里就先不讲了。

前面已经说了Snackbar可以加一个点击事件,加起来有相当简单:

 Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT)                        .setAction("点我", new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                Toast.makeText(MainActivity.this, "it is Toast", Toast.LENGTH_SHORT).show();                            }                        }) .show();

click.gif

我去,按钮(“点我”)居然是玫红色,不要担心,这个当然是可以自定义的,只需要加一个颜色就好。

 Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT)                        //设置按钮颜色                        .setActionTextColor(Color.WHITE)                        .setAction("点我", new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                Toast.makeText(MainActivity.this, "it is Toast", Toast.LENGTH_SHORT).show();                            }                        }) .show();

这样就变成了白色。

另外SnackBar还贴心的提供了关于show和dismiss的回调方法:

  Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT)                        .setActionTextColor(Color.WHITE)                        .setCallback(new Snackbar.Callback() {                            @Override                            public void onDismissed(Snackbar snackbar, int event) {                                super.onDismissed(snackbar, event);                                Toast.makeText(MainActivity.this, "Snackbar dismiss", Toast.LENGTH_SHORT).show();                            }                            @Override                            public void onShown(Snackbar snackbar) {                                super.onShown(snackbar);                                Toast.makeText(MainActivity.this, "Snackbar show", Toast.LENGTH_SHORT).show();                            }                        })                        .setAction("点我", new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                Toast.makeText(MainActivity.this, "it is Toast", Toast.LENGTH_SHORT).show();                            }                        }) .show();

尽管Snackbar已经很炫酷很漂亮,但我知道它依然无法满足你不走寻常路的心,那要不然我们再想办法自定义一个呗。那我们先改变下Snackbar的背景色或者背景图吧。

  Snackbar bar=Snackbar.make(findViewById(R.id.tv), "it is Snackbar",Snackbar.LENGTH_SHORT);                View v=bar.getView();                v.setBackgroundColor(Color.GREEN);                bar.show();

1.pic.png

什么?你还不满意,还要改变显示位置?还要加个icon?动画也要改一改?没关系,都可以。

 Snackbar mSnackbar=Snackbar.make(findViewById(R.id.tv), "it is Snackbar", Snackbar.LENGTH_SHORT);                View v=mSnackbar.getView();                ViewGroup.LayoutParams vl = v.getLayoutParams();                CoordinatorLayout.LayoutParams cl = new CoordinatorLayout.LayoutParams(vl.width,vl.height);                //设置字体为红色                ((TextView) v.findViewById(R.id.snackbar_text)).setTextColor(Color.RED);                //设置显示位置居中                cl.gravity = Gravity.CENTER;                v.setLayoutParams(cl);                //设置背景色为绿色                v.setBackgroundColor(Color.GREEN);                //自定义动画                //v.setAnimation();                //设置icon                ImageView iconImage=new ImageView(MainActivity.this);                iconImage.setImageResource(R.mipmap.ic_launcher);                //icon插入布局                Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) v;                snackbarLayout.addView(iconImage,0);                //设置按钮为蓝色                mSnackbar.setActionTextColor(Color.BLUE).setAction("点我", new View.OnClickListener() {                    @Override                    public void onClick(View v) {                    }                }).show();

snackbar.png

代码略乱,童鞋们可以根据自己的业务需求做封装。


1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ic卡消磁了怎么办妙招 如果电卡消磁了怎么办 学校水卡消磁了怎么办 小区水卡消磁了怎么办 乐高配件少了怎么办 乐高世界锁区怎么办 商铺到期40年后怎么办 pu皮的包包脏了怎么办 盐酸弄到皮肤上怎么办 小区主管道堵了怎么办 小玻璃渣进眼睛怎么办 吃了发霉的米饭怎么办 吃了发霉的玉米怎么办 误吃了黄曲霉素怎么办 月子里奶不够吃怎么办 打了地佐辛头晕怎么办 粉瘤化脓破了怎么办 脸里面长了粉瘤怎么办 强险保单丢了怎么办 我被财产保全了怎么办 孕妇血糖高怎么办降下来吗 血糖不高尿糖高怎么办 全血粘度1 5偏高怎么办 血粘度低切偏低怎么办 书侧面上弄上油怎么办 肌注部位打偏了怎么办 吃头孢克圬过敏怎么办 孕妇让蚊子咬了怎么办 怀孕了被蚊子咬了怎么办 夏天被蚊子咬了该怎么办 尿酸高怎么办有什么危害 RH阴性血生二胎怎么办 柴油箱里加了水怎么办 五菱之光烧机油怎么办 软轴水泵不出水怎么办 小车柴油冻住了怎么办 皮卡柴油车冻了怎么办 发现4柴油车冻了怎么办 装载机暖风不热怎么办 柴机油加汽机车怎么办 货车故障灯亮了怎么办