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>
相关推荐
hcgeng10 分钟前
Android获取崩溃日志
android
aqi0013 分钟前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-9337 分钟前
【Android】Android Studio 中的协程
android
Geek-Chow38 分钟前
移动 App 侧载攻击:Android 与 iOS 的信任链、突破口与防护
android
Android小码家2 小时前
framework&framework-minus-apex&android.jar的区别
android·python·jar
技术风向解码者2 小时前
安卓跨端选型:为什么优先看 Kuikly
android
科小怪2 小时前
大肥鱼桌宠下载(2026最新版):在安卓桌面上养一条会走会弹会碎碎念的胖鱼
android
qq3621967052 小时前
安卓安装包完整性校验:怎么确认下载的 APK 没被动过手脚
android
FLJwu2 小时前
《运动相机硬件防护选型实战》专栏|第二篇(PPTC 自恢复保险丝)
android·经验分享·数码相机·1024程序员节·运动相机