我正在BottomSheetDialogFragment
上工作,我的要求是创建底部菜单,如果我 * 点击碎片区域外 *,它应该不取消对话框,并应持续存在。
问题:片段外部的事件应传播到较低的片段视图/片段。
我已经尝试了以下(不工作的BottomDialogFragment):Allow outside touch for DialogFragment
为了停止对话框cancel,我尝试了以下操作(我在BottomDialogFragment的onStart()
中调用setCancelable(boolean)
):
@Override
public void setCancelable(boolean cancelable) {
super.setCancelable(cancelable);
BottomSheetDialog dialog = (BottomSheetDialog) getDialog();
dialog.setCanceledOnTouchOutside(cancelable);
View bottomSheetView = dialog.getWindow().getDecorView().findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior.from(bottomSheetView).setHideable(cancelable);
}
reference
编辑:发现它的艰难方式没有其他去然后使用坐标布局。最好的解决方案为BottomSheetDialog是here
5条答案
按热度按时间svdrlsy41#
在
BottomSheetDialog
中尝试以下代码:或者用
<CoordinatorLayout>
Package ,例如您的<ConstraintLayout>
,然后实现<layout />
并附加到BottomSheetBehavior
。a11xaf1n2#
正如Pankaj Kumar所说,默认情况下这是不可能的。但是,我找到了一个工作区,允许在保持底部工作表打开的同时触摸底部工作表以外的视图
您可以覆盖
BottomSheetDialog
的布局,如下所示:值/引用.xml
布局/自定义设计底部工作表对话框.xml
您的自定义底部工作表对话框片段
通过这样做,对话框具有
wrap_content
的高度,并且标志允许由该对话框之外的视图处理触摸bpzcxfmw3#
这在使用
BottomSheetDialogFragment
之前是不可能的。BottomSheetDialogFragment
是一个对话框,作为每个对话框的行为,它不允许用户在对话框后面的任何视图上拦截,尽管用户可以看到。因此,要实现这一点,你需要使用
Fragment
而不是BottomSheetDialogFragment
。是的,这将需要大量的代码更改:)如果你想拦截后面的视图,你必须没有BottomSheetDialogFragment
。kwvwclae4#
您应该使用
android.support.design.widget.BottomSheetBehavior
。但是如果你想在其他类中有一个
bottomSheet
,我建议你使用Fragment
,并在这个fragment
中打开你的bottomSheet
打开你的片段in this way。
在您的片段中,使用以下代码打开
bottomSheet
:在
onInitViews
中您的
layout
应该是这样的:希望对你有帮助
cwdobuhd5#
如上所述,我们不能直接使用BottomSheetDialogFragment或BottomSheetDialog来达到允许触摸外部的效果。
但是我们可以借助BottomSheetDialogFragment中的Dialog和BottomSheetCallback来实现。(光说不练,代码给你看)
对应xml文件:
和样式. xml