android - 防止 Snackbar 在点击操作时关闭

标签 android android-layout android-view android-snackbar 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();

最佳答案

这里有一个更简洁的解决方案来实现这一点,它不需要反射。它基于了解 Snackbar 中按钮的 View ID。 这适用于支持库的 27.1.1 版,但如果 View ID 发生更改,可能在未来的版本中不再适用!

首先,使用一个空的 OnClickListener 设置您的 snackbar Action :

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

然后,添加回调到 snackbar(在显示之前)。覆盖 onShown 函数,使用 R.id.snackbar_action 找到按钮并向其添加您自己的 OnClickListener。只有在手动调用 snackbar.dismiss() 时,或者如果 snackbar 附加到 CoordinatorLayout 时通过滑动,snackbar 才会被关闭(如何禁用滑动是一个不同的 SO 问题)。

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
        }

关于android - 防止 Snackbar 在点击操作时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40103271/

相关文章:

android - 在该 View 外单击时 View 消失

android - 如何直接向 FrameLayout 添加元素 (android :id/content?)

java - 光标没有给出任何答案

android - 我想使布局边框如下图所示

android - 如何在android中创建一个可点击的不规则形状区域?

android - 为什么 RecyclerView 项目中的 ConstraintLayout 比 LinearLayout 慢?

Android - 如何在布局中存储额外的隐藏信息(按标签)

android - Android 中的自然语言处理 API

android - Android 上 App 之间的切换会发生什么?

android - 更改 LayoutParams 后,RelativeLayout 中的按钮消失