阻止Snackbar解除动作点击

Ele*_*uan 5 android android-layout android-view snackbar android-snackbar

如何防止Android Snackbar在setAction onclick上解雇,谢谢

Snackbar.make(rootlayout, "Hello SnackBar!", Snackbar.LENGTH_INDEFINITE)
   .setAction("Undo", new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           // Snackbar should not dismiss
       }
   })
   .show();
Run Code Online (Sandbox Code Playgroud)

Ovi*_*diu 5

这是实现此目的的一种较干净的解决方案,不需要反射。它基于已知Snackbar中按钮的视图ID。该版本适用于支持库的27.1.1版本,但是如果将更改视图ID,则在以后的版本中可能不再可用!

首先,使用一个空的OnClickListener设置点心栏操作:

snackbar.setAction("Save", new View.OnClickListener() {
    @Override
    public void onClick(View v) {}
});
Run Code Online (Sandbox Code Playgroud)

然后,在小吃店中添加一个回调(在显示之前)。覆盖onShown函数,使用查找按钮R.id.snackbar_action,然后向其中添加自己的OnClickListener。仅当手动调用时snackbar.dismiss(),或者如果将快餐栏连接到CoordinatorLayout(如何禁用划动是另一个不同的问题)时,才通过滑动来关闭快餐栏。

snackbar.addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() {
    @Override
    public void onShown(Snackbar transientBottomBar) {
        super.onShown(transientBottomBar);

        transientBottomBar.getView().findViewById(R.id.snackbar_action).setOnClickListener(new View.OnClickListener() {
            // your code here
        }
Run Code Online (Sandbox Code Playgroud)