gpt4 book ai didi

android - 禁止拖动具有可滚动子项的 BottomSheetDialogFragment

转载 作者:太空宇宙 更新时间:2023-11-03 11:41:41 30 4
gpt4 key购买 nike

是否可以为包含可 ScrollView (例如 ViewPagerNestedScrollView)的 BottomSheetDialogFragment 禁用拖动,这样它就可以'既不被拖上也不被拖下,但仍会通过触摸外部而被解雇,并且 children 无论如何都可以被拖拽?

我已经查看了所有答案 here但我不高兴,因为大多数不考虑可滚动的 child 或通过强制展开状态来工作。最接近的是this answer但仍然允许向上拖动工作表。

对于我应该修改原始源代码的哪些部分,是否有任何解决方案或至少有指导?

最佳答案

如果您调试应用程序并使用布局检查器工具,您将看到 BottomSheetDialogFragment 使用 CoordinatorLayout。变暗的背景是一个简单的 View ,带有关闭对话框的 OnClickListener,工作表移动由 CoordinatorLayout.Behavior 驱动。 .

这可以通过修改创建的对话框来覆盖:​​

Java:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog d = super.onCreateDialog(savedInstanceState);
// view hierarchy is inflated after dialog is shown
d.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
//this disables outside touch
d.getWindow().findViewById(R.id.touch_outside).setOnClickListener(null);
//this prevents dragging behavior
View content = d.getWindow().findViewById(R.id.design_bottom_sheet);
((CoordinatorLayout.LayoutParams) content.getLayoutParams()).setBehavior(null);
}
});
return d;
}

Kotlin

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val d = super.onCreateDialog(savedInstanceState)
//view hierarchy is inflated after dialog is shown
d.setOnShowListener {
//this disables outside touch
d.window.findViewById<View>(R.id.touch_outside).setOnClickListener(null)
//this prevents dragging behavior
(d.window.findViewById<View>(R.id.design_bottom_sheet).layoutParams as CoordinatorLayout.LayoutParams).behavior = null
}
return d
}

这确实使用设计库的内部 ID,但除非出于某种原因更改它们,否则这应该是稳定的。

关于android - 禁止拖动具有可滚动子项的 BottomSheetDialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48360305/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com