Kotlin中如何修改或隐藏Dialog弹出时背后页面的背景?
解决方案
你要修改/移除Dialog弹出时背后的暗色蒙层,完全可以通过Dialog自身的Window属性实现,不需要额外配置其他组件。
Dialog背后的蒙层由其所属Window的dimAmount属性控制,只需要在dialog.show()执行前添加以下配置代码即可:
dialog.window?.apply { // 完全移除蒙层(设为全透明) setDimAmount(0f) // 👇 如果是要修改蒙层的透明度/颜色,而非完全移除,用下面的配置替换上面的setDimAmount即可 // addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) // setDimAmount(0.4f) // 取值范围0~1,数值越大蒙层越暗 // setDimColor(Color.parseColor("#66FF0000")) // 自定义蒙层颜色,前两位代表透明度 }
注意:
setDimColor方法仅支持 Android 12(API 31)及以上系统,如需兼容更低版本自定义蒙层颜色,可通过给Dialog根布局添加半透明背景层的方式实现。
将上述代码插入到你的原有逻辑中,完整函数参考如下:
fun showAddNoteDialog() { val dialog = Dialog(requireActivity()) dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog.setCancelable(true) dialog.setContentView(R.layout.ilmnotes_dialog) btn_add = dialog.findViewById(R.id.btn_add) titleEditText = dialog.findViewById(R.id.title) noteDescText = dialog.findViewById(R.id.noteDesc) date_container = dialog.findViewById(R.id.date_container) date_container.applyClickShrink() date_container.setOnClickListener { val datePicker: DialogFragment = DatePickerFragment() // Get Current Date val c = Calendar.getInstance() mYear = c[Calendar.YEAR] mMonth = c[Calendar.MONTH] mDay = c[Calendar.DAY_OF_MONTH] val datePickerDialog = DatePickerDialog( it.context, DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth -> Toast.makeText( it.context, "$year-$monthOfYear-$dayOfMonth", Toast.LENGTH_LONG ).show() }, mYear, mMonth, mDay ) datePickerDialog.show() } btn_add.setOnClickListener { postNote(dialog) } // 新增的蒙层配置代码 dialog.window?.apply { setDimAmount(0f) } dialog.show() }
如果不想在代码里动态配置,也可以通过自定义Dialog主题的方式实现,在对应style中添加<item name="android:backgroundDimEnabled">false</item>即可关闭蒙层,和代码修改效果一致。
内容的提问来源于stack exchange,提问作者Enigma
相关产品推荐
相关产品推荐

