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

Flutter 如何让所有页面(含启动过渡屏)状态栏导航栏全透明且显示深色图标

问题原因

Flutter Android应用启动时的两个过渡屏分别对应:

  • 第一屏:系统冷启动窗口预览,完全由style.xml中的AppTheme配置控制
  • 第二屏:Flutter引擎初始化过渡窗口,由MainActivity中onCreate阶段的窗口配置控制

当前修改后第二屏图标仍为白色的核心原因是:仅在MainActivity中修改了系统栏的背景颜色为透明,没有同步修改系统栏图标亮度属性,导致浅色图标在白色/透明背景下不可见。

修复方案

1. 修改style.xml配置

替换原有NormalTheme配置,统一第一屏的透明系统栏+黑色图标效果:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/launch_background</item>
        <!-- 系统栏完全透明 -->
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:navigationBarColor">@android:color/transparent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <!-- 状态栏图标黑色(Android 6.0+支持) -->
        <item name="android:windowLightStatusBar">true</item>
        <!-- 导航栏图标黑色(Android 8.0+支持) -->
        <item name="android:windowLightNavigationBar">true</item>
        <!-- 适配挖孔屏避免系统栏区域出现黑边 -->
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>

2. 修改MainActivity.kt配置

设置系统栏透明的同时同步配置图标亮度,保证第二屏效果和目标样式一致:

import android.os.Build
import android.view.Window
import android.graphics.Color
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val window: Window = window
        // 系统栏完全透明
        window.setStatusBarColor(Color.TRANSPARENT)
        window.setNavigationBarColor(Color.TRANSPARENT)
        // 同步设置状态栏图标为黑色
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or 
                android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
        }
        // 同步设置导航栏图标为黑色
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or
                android.view.View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
        }
        // 允许应用内容延伸到系统栏区域
        window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or
            android.view.View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
            android.view.View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
            android.view.View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    }
}

3. 统一Flutter端全局系统栏样式

在应用入口处全局配置,保证后续所有Flutter页面效果一致:

import 'package:flutter/services.dart';
import 'package:flutter/material.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setSystemUIOverlayStyle(const SystemUIOverlayStyle(
    statusBarColor: Colors.transparent,
    statusBarBrightness: Brightness.light, // iOS端状态栏图标黑色适配
    statusBarIconBrightness: Brightness.dark, // Android端状态栏图标黑色适配
    navigationBarColor: Colors.transparent,
    navigationBarIconBrightness: Brightness.dark, // 导航栏图标黑色适配
  ));
  runApp(const MyApp());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:48:04