You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android如何设置状态栏透明并修改图标为白色(不影响导航栏)

解决Android状态栏透明且图标变白(不修改导航栏)的问题

看起来你现在的配置不小心把导航栏也改成透明了,咱们来调整一下,只针对状态栏做修改,同时把图标改成白色:

第一步:修改Style配置(核心)

打开你的styles.xml,调整AppTheme的属性,移除所有和导航栏相关的配置,只保留状态栏的设置:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.DayNight">
        <!-- 保留你原有主题的基础配置,比如colorPrimary这些 -->
        <item name="colorPrimary">@color/your_primary_color</item>
        <item name="colorPrimaryDark">@color/your_primary_dark_color</item>
        <item name="colorAccent">@color/your_accent_color</item>

        <!-- 设置状态栏为透明 -->
        <item name="android:statusBarColor">@android:color/transparent</item>
        <!-- API 23+ 生效:让状态栏图标/文字变成白色(false表示禁用浅色状态栏) -->
        <item name="android:windowLightStatusBar">false</item>
        <!-- 允许系统绘制状态栏背景,确保透明效果生效 -->
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    </style>
</resources>

如果你的页面不需要ActionBar,可以把父主题改成Theme.AppCompat.DayNight.NoActionBar,避免额外的布局冲突。

第二步:适配低版本Android(API 21-22)

上面的windowLightStatusBar只在API 23(Android 6.0)及以上生效,针对Android 5.0-5.1的设备,需要在代码里做动态适配。在你的Activity的onCreate方法里添加这段逻辑:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_activity_layout);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
        // 设置状态栏透明
        getWindow().setStatusBarColor(Color.TRANSPARENT);
        // 让状态栏图标变白,同时确保内容可以延伸到状态栏下方
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        );
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        // API 30+ 用新的InsetsController API更规范
        getWindow().getInsetsController().setSystemBarsAppearance(
                0, 
                WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
        );
    }
}

第三步:调整布局(可选)

如果希望页面内容延伸到状态栏的透明区域,需要在根布局添加android:fitsSystemWindows="false";如果想让布局避开状态栏区域,保持默认的true即可,根据你的UI需求来选择。

关键注意点

  • 一定不要添加android:navigationBarColor这类属性,这样导航栏会保持系统默认的主题样式,不会被修改
  • 如果你用的是Material Components主题,配置逻辑是一样的,只需要把父主题改成Theme.MaterialComponents.DayNight就行

内容的提问来源于stack exchange,提问作者RedBounce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:39:08