Android 实现沉浸式状态栏

一、背景

项目中需要实现背景图从状态栏开始显示(即沉浸式状态栏),同时保持状态栏图标(如电量、时间等)可见

二、方案实现

方案一:在Activity中设置

1、首先将styles文件的AppTheme改为无标题栏 即:

XML 复制代码
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

2、设置沉浸式状态栏(Activity中设置方案)

Kotlin 复制代码
  /**
     * 设置沉浸式状态栏
     */
    private fun setupImmersiveStatusBar() {
        // API 21+ 设置状态栏透明
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            window.statusBarColor = Color.TRANSPARENT
        }

        // API 23+ 设置状态栏图标颜色(亮色或暗色)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            // 亮色背景使用暗色图标
            window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE

            // 或者使用暗色背景使用亮色图标
            // window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            //     View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            //     View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        }
    }

注:在Activity的setContentView前调用

方案二:在主题中设置(values/themes.xml)

XML 复制代码
<style name="Theme.App.Immersion" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- 设置状态栏透明 -->
    <item name="android:statusBarColor">@android:color/transparent</item>
    <!-- 确保内容可以延伸到状态栏 -->
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
相关推荐
艾iYYY2 小时前
string 类的模拟实现
android·服务器·c语言·c++·算法
xyzzklk3 小时前
解决Salesforce无法向外发送邮件
android·java·开发语言·网络·crm·salesforce·客户关系管理
修炼者5 小时前
Gradle三阶段
android
morchalen6 小时前
安卓framework学习6:Contacts 联系人 APP 日志
android
KANGBboy6 小时前
java知识四(面向对象编程)
android·java·开发语言
AD钙奶-lalala9 小时前
Android Studio新建项目默认不使用Compose模版
android·ide·android studio
故渊at11 小时前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·系统架构·apk·打包·application·dalvik·android编译
故渊at12 小时前
第一板块:Android 系统基石与运行原理 | 第三篇:ART 与 Dalvik 运行时环境原理
android·对象模型·内存布局·运行原理·art·dalvik
私人珍藏库13 小时前
【Android】Wallcraft 3.62.0-最强4 K壁纸软件-解锁高级版
android·智能手机·app·工具·软件·多功能
GesLuck13 小时前
Node-RED企业微信发送—群文件
android·java·企业微信