如何移除Jetpack Compose中Dialog组件的默认水平内边距
Jetpack Compose 移除Dialog默认水平内边距
你当前的Dialog代码已实现底部对齐,但始终存在约18dp的默认水平内边距,可通过以下方式彻底移除:
问题代码
Dialog(onDismissRequest = {}) { val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider dialogWindowProvider.window.setGravity(Gravity.BOTTOM) Surface( shape = RoundedCornerShape(16.dp), elevation = 0.dp, color = Color.Transparent, modifier = Modifier .padding(bottom = 24.dp) .fillMaxWidth(), ) { } }
解决方案
直接通过DialogWindowProvider获取Window实例,修改其装饰视图的内边距并调整布局参数,彻底清除默认水平间距:
Dialog(onDismissRequest = {}) { val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider val window = dialogWindowProvider.window window.setGravity(Gravity.BOTTOM) // 移除Window装饰视图的默认水平内边距 window.decorView.setPadding(0, 0, 0, 0) // 清除布局参数中的水平外边距 val layoutParams = window.attributes as WindowManager.LayoutParams layoutParams.horizontalMargin = 0f window.attributes = layoutParams Surface( shape = RoundedCornerShape(16.dp), elevation = 0.dp, color = Color.Transparent, modifier = Modifier .padding(bottom = 24.dp) .fillMaxWidth(), ) { } }
原理:Compose的Dialog组件默认会为Window的decorView添加水平内边距,同时Window布局参数可能存在默认水平外边距,通过上述两步操作可以完全消除这些默认间距,让你的Surface可以铺满Dialog的水平空间。
内容的提问来源于stack exchange,提问作者Andrey Kijonok
相关产品推荐
相关产品推荐

