Snackbar 使用

2018-12-24  本文已影响0人  yuzhiyi_宇

谷歌在其 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
上一篇下一篇

猜你喜欢

热点阅读