如何防止 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/