android - 沉浸式全屏和首选项对话框下拉状态栏
问题描述
我正在使用沉浸式全屏活动,对于我的对话框,我使用了我在这里找到的 hack,我在打开对话框时将对话框设置为不可聚焦,因此它不会拉下状态栏。
dialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
现在我正在寻找一种为首选项对话框获得相同结果的方法(现在它只有一个 ListPreference)
我尝试在我的 PreferenceFragment 中覆盖 onDisplayPreferenceDialog 并在对话框上设置标志,但状态栏仍然显示。
解决方案
您可以覆盖onDisplayPreferenceDialog(preference: Preference?)
并创建自己的AlertDialog
支持单选按钮,AlertDialog
因此实际上您可以创建从首选项库本身呈现的相同对话框。当您显示该对话框时,您可以应用解决方法修复以在沉浸式模式下显示它。
override fun onDisplayPreferenceDialog(preference: Preference?) {
AlertDialog.Builder(context)
.setTitle(<titleResID>)
.setSingleChoiceItems(<itemsArrayResID>, 0) { dialog, which ->
(preference as ListPreference).value = this.resources.getStringArray(<valuesArrayResID>)[which]
dialog.dismiss()
}
.setPositiveButton(R.string.cancel) { _, _ -> }
.showImmersive()
}
实际上在这里我已经创建了showImmersive()
扩展方法来AlertDialog.Builder
使用解决方法黑客以沉浸模式显示警报对话框
fun AlertDialog.Builder.showImmersive(): AlertDialog {
val alertDialog = create()
alertDialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
alertDialog.window?.decorView?.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_FULLSCREEN)
alertDialog.show()
alertDialog.window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
return alertDialog
}
推荐阅读
- git - 使用 Azure VM 的权限被拒绝错误 Git
- r - 替换一个数据集在另一个数据集中的出现
- javascript - JS中两个三元运算符如何协同工作?
- c# - 复合共享键和实体
- android-studio - Android工作室Java.lang.OutOfMemoryError
- python - Python创建增量文件夹
- arrays - 在 Fortran 90 中沿整个数组求和
- python - 卸载和安装 python,现在面临 pip 问题
- r - 如何在 R Shiny 应用程序中切换选项卡(tabPanel)时显示确认消息?
- javascript - 如何从云 Firestore 仅获取没有任何元数据的数据?