美文网首页
Snackbar 使用

Snackbar 使用

作者: yuzhiyi_宇 | 来源:发表于2018-12-24 20:22 被阅读0次

    谷歌在其 2015年的 I/O 大会上发布了一个全新兼容函数库,开发者可以在安卓 2.1(API Level 7)及以上的设备中实现 Material Design 的效果,提供了一系列的控件,主要包括:Snackbar,TextInputLayout,FloatActionButton,TabLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout,BottomSheetBahavior。

    在使用 Design Support Library 之前,需要先添加如下依赖。

    implementation 'com.android.support:design:27.1.1'
    

    Snackbar

    Snackbar 是带有动画效果的快速提示栏,显示在屏幕的底部,用来替代 Toast,基本上继承了 Toast 的属性和方法,和 Toast 最大的不同是 Snackbar 可以带有按钮。当 Snackbar 显示时,用户可以点击按钮执行对应的操作,如果用户没有任何操作,指定事件之后就会自动消失。一个时刻只能有唯一一个 Snackbar,当同时弹出多个消息时,Snackbar 会停止前一个,直接显示后一个,Toast 则可以多个同时出现。

    使用

    构造方法。

    public static Snackbar make(@NonNull View view, @NonNull CharSequence text, @Duration int duration)
    
    public static Snackbar make(@NonNull View view, @StringRes int resId, @Duration int duration)
    

    其中第一个参数是一个 view,用来存放 Snackbar。如果该 View 是 CoordinatorLayout,那么 Snackbar 可以通过右滑消失。
    第二个参数可以是一个字符串,也可以是一个字符串的资源 id。
    第三个参数是设置时间。你可以设置 LENGTH_INDEFINITE, LENGTH_SHORT, LENGTH_LONG,也可以设置成具体的毫秒数。可以通过 setDuration 修改显示的时间。

    常量 消失的时间
    LENGTH_INDEFINITE 手动消失,或者其他 Snackbar 出现
    LENGTH_SHORT 短时间显示,然后自动取消
    LENGTH_LONG 长时间显示,然后自动取消

    显示 Snackbar 可以通过 show() 方法。消失有好几种方式,这些方式对应 Snackbar.Callback 中的几个常量。

    常量 消失的方式
    DISMISS_EVENT_SWIPE 滑动导致消失
    DISMISS_EVENT_ACTION 点击 Action 按钮导致消失
    DISMISS_EVENT_TIMEOUT 设置的时间到了导致消失
    DISMISS_EVENT_MANUAL 调用 dismiss 方法导致小时
    DISMISS_EVENT_CONSECUTIVE 新的 Snackbar 出现导致消失。

    基本用法

        Snackbar.make(activity_design, R.string.app_name, Snackbar.LENGTH_LONG)
                .setAction("点击", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Toast.makeText(DesignActivity.this, "你点击我了", Toast.LENGTH_SHORT).show();
                    }
                }).addCallback(new Snackbar.Callback() {
                    @Override
                    public void onDismissed(Snackbar transientBottomBar, int event) {
                        super.onDismissed(transientBottomBar, event);
                    }
    
                    @Override
                    public void onShown(Snackbar sb) {
                        super.onShown(sb);
                    }
                }).setDuration(Snackbar.LENGTH_INDEFINITE).show();
    

    效果

        private void showNoramlSnackbar() {
            Snackbar.make(coordinatorLayout, "普通的Snackbar", Snackbar.LENGTH_LONG).show();
        }
    
        private void showButtonSnackbar() {
            Snackbar.make(coordinatorLayout, "带按钮的Snackbar", Snackbar.LENGTH_LONG)
                    .setAction("点击", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(DesignActivity.this, "你点击带按钮的Snackbar", Toast.LENGTH_SHORT).show();
                        }
                    }).show();
        }
    
        private void showCustomSnackbar() {
            Snackbar snackbar = Snackbar.make(coordinatorLayout, "自定义背景字体颜色", Snackbar.LENGTH_LONG)
                    .setAction("点击", new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            Toast.makeText(DesignActivity.this, "你点击自定义背景字体颜色的Snackbar", Toast.LENGTH_SHORT).show();
                        }
                    });
            View snackbarView = snackbar.getView();
            Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbarView;
            snackbarLayout.setBackgroundColor(0xff0000ff);
            ((TextView)snackbarView.findViewById(R.id.snackbar_text)).setTextColor(Color.parseColor("#FF0000"));
            ((Button)snackbarView.findViewById(R.id.snackbar_action)).setTextColor(Color.parseColor("#00FF00"));
            snackbar.show();
        }
    
    效果.gif

    相关文章

      网友评论

          本文标题:Snackbar 使用

          本文链接:https://www.haomeiwen.com/subject/hgtzkqtx.html