Android面试题之Kotlin Dialog隐藏导航栏

本文首发于公众号“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查看更多精彩文章!

AntDream

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值