android - 如何在适配器 kotlin 中打开全屏底部对话框
问题描述
我如何在全屏模式下打开底部对话框。但每当我点击它时,它只会打开半屏视图,而不是我滚动到全屏。但还有一件事是在适配器类中
var flashAlertPopUp = FareDetailBottomSheet(data.fare_details)
flashAlertPopUp.show(childFragmentManager, "")
解决方案
setupDialog()
在您的孩子中覆盖以BottomSheetDialogFragment
将其设置为随着屏幕尺寸的高度而扩展,如下所示:
override fun setupDialog(dialog: Dialog, style: Int) {
super.setupDialog(dialog, style)
val parentView = rootView.parent as View
val params = parentView.layoutParams as CoordinatorLayout.LayoutParams
val behavior = params.behavior
if (behavior != null && behavior is BottomSheetBehavior<*>) {
behavior.state = BottomSheetBehavior.STATE_EXPANDED
behavior.peekHeight = requireContext().screenSize.y
}
}
val Context.screenSize: Point
get() = Point().also {
(getSystemService(Context.WINDOW_SERVICE) as? WindowManager)?.defaultDisplay?.getSize(it)
}
在 Java 代码中:
public class FareDetailBottomSheet extends BottomSheetDialogFragment {
private View rootView;
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(@NonNull Dialog dialog, int style) {
super.setupDialog(dialog, style);
// layoutResId: your layout resource id
rootView = View.inflate(requireContext(), layoutResId, null);
dialog.setContentView(rootView);
onInitViews();
View parentView = (View) rootView.getParent();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) parentView.getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
if (behavior instanceof BottomSheetBehavior) {
((BottomSheetBehavior) behavior).setState(BottomSheetBehavior.STATE_EXPANDED);
((BottomSheetBehavior) behavior).setPeekHeight(getScreenSize().y);
}
}
private void onInitViews() {
// do your initialization here...
// for example:
// TextView textView = rootView.findViewById(R.id.textView);
}
private Point getScreenSize() {
Point point = new Point();
WindowManager wm = (WindowManager) requireContext().getSystemService(Context.WINDOW_SERVICE);
if (wm.getDefaultDisplay() != null) {
wm.getDefaultDisplay().getSize(point);
}
return point;
}
}
推荐阅读
- ios - SwiftUI ForEach 无法推断复杂的闭包返回类型;添加显式类型以消除歧义
- python - 如何根据强度用标记颜色绘制气旋轨迹
- javascript - Regex [数据欧芹模式] 允许特殊字符
- ruby - 方法存在,但 Ruby 说它是未定义的
- javascript - 处理 axios 错误和响应 (vue) 仅适用于一个错误。如何通知多个错误?
- node.js - 嵌套结构mongodb下如何使用$elemMatch
- python - 如何在 Python 中使用 opencv 或 PIL 提取混合到另一个图像中的图像
- python - 是否可以将某个语音频道中的用户静音,而不是将他们从不和谐的频道中删除?(Python)
- python - PyQt中类(滑块+标签)的多个实例相互阻塞
- javascript - 将状态传递给基于函数的组件时面临的问题