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>
相关推荐
Xzaveir10 小时前
不要用一个状态表示“号码已认证”:企业号码身份的四域模型
android·人工智能
(Charon)10 小时前
【C++】手写 MySQL 连接池(二):同步连接的获取、加锁与释放
android
zhangjin112012 小时前
AOSP下载
android
Mico1812 小时前
MySQL 8.0.35 GTID 主从复制搭建-基于GITD
android·mysql·adb
YXL1111YXL14 小时前
LeakCanary 源码解析检测泄露工作机制(一)
android·leakcanary
且随疾风前行.16 小时前
Android Binder 驱动 - 内核驱动层源码初探
android·网络·binder
额恩6616 小时前
AI 智能体从零搭建实战教程——扣子
android·rxjava·coze
hunterandroid17 小时前
前台服务适配与线上排查:通知权限、启动限制和任务保活
android·前端
帅次17 小时前
Android 高级工程师面试:Flutter 渲染与性能 近1年高频追问 20 题
android·flutter·面试·渲染·性能
糖果店的幽灵18 小时前
【langgraph 从入门到精通graphApi 篇】Command 与动态流程控制
android·java·数据库·人工智能·langgraph