本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
在 Android 中,如果想在 Dialog
中隐藏系统导航栏(包括状态栏和底部的导航键),可以通过设置窗口属性来实现。在创建 Dialog
时,可以使用 Window
类提供的一些标志来隐藏导航栏。
自定义 FullScreenDialog.kt
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.Window
import android.view.WindowManager
class FullScreenDialog(context: Context) : Dialog(context) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE) // 去掉对话框的标题栏
setContentView(R.layout.dialog_fullscreen) // 设置对话框的布局
window?.let {
it.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT
)
it.decorView.systemUiVisibility =
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
View.SYSTEM_UI_FLAG_FULLSCREEN
}
}
}
在 Activity 中使用
在你的 Activity
中,通过以下方式显示自定义对话框:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val dialog = FullScreenDialog(this)
dialog.show()
}
}
XML 布局文件
确保你有一个对应的布局文件,例如 res/layout/dialog_fullscreen.xml
:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Your layout content goes here -->
</FrameLayout>
解释
1、 requestWindowFeature(Window.FEATURE_NO_TITLE):
- 这行代码隐藏了对话框的标题栏。
2、 setContentView(R.layout.dialog_fullscreen):
- 设置对话框的布局。
3、 window?.let { … }:
- 为了确保
window
不为 null,使用 Kotlin 的安全调用操作符?.
来使用窗口对象。 - setLayout 方法将对话框设置为全屏。
- systemUiVisibility 属性用于隐藏系统导航栏和状态栏。
通过这些设置,当显示 Dialog
时,它将隐藏系统导航栏和状态栏,实现全屏显示。如果需要在更多场景下多次使用该样式,可以进一步将其封装或抽取为一个通用组件。
欢迎关注我的公众号AntDream查看更多精彩文章!