You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 15 & 16 三键导航栏图标颜色修改问题

Android 15 & 16 三键导航栏图标颜色修改问题

嘿,我刚好折腾过类似的问题,给你分享几个针对 Flutter + Android 15/16(API35/36)场景的可行方案,亲测有效:

方案一:修改 Android 原生主题配置(最稳定)

这个是我最先搞定的方法,直接从Android原生主题入手,基本不会和Flutter的主题冲突:

  • 打开项目里的 android/app/src/main/res/values/styles.xml,找到你的App主题(一般叫LaunchTheme或者NormalTheme),添加这两个关键属性:
    <item name="android:navigationBarIconColor">@color/your_custom_icon_color</item>
    <item name="android:navigationBarContrastEnforced">false</item>
    
    这里的your_custom_icon_color是你提前在res/values/colors.xml里定义的颜色,比如:
    <color name="nav_icon_black">#FF000000</color>
    
  • 如果你的App支持深色模式,记得同步修改res/values-night/styles.xml里的对应属性,保证深色主题下图标颜色也符合你的需求。
  • 划重点:navigationBarContrastEnforced这个属性一定要加!Android 15开始系统会强制检查导航栏图标和背景的对比度,不加的话系统可能直接覆盖你的自定义颜色,用回默认的深灰/浅灰。

方案二:Flutter 代码动态控制(适合主题切换场景)

如果你需要根据App内的主题动态切换导航栏图标颜色,可以用Flutter的SystemChrome来设置:

  • 先导入services.dart包,然后写一个控制方法:
    import 'package:flutter/services.dart';
    
    void updateNavigationBarIcons() {
      SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
        // 控制图标亮度:Brightness.dark是深色图标,Brightness.light是浅色图标
        systemNavigationBarIconBrightness: Brightness.dark,
        // 必须设置导航栏背景色,确保和图标颜色的对比度符合要求
        systemNavigationBarColor: Colors.white,
        // 同样要关闭系统强制对比度检查
        systemNavigationBarContrastEnforced: false,
      ));
    }
    
  • 你可以在App启动的时候调用这个方法,或者在切换主题的逻辑里触发,就能动态更新图标颜色了。

几个要注意的小细节

  • 一定要用API35/36的模拟器或者真实的Android15/16设备测试,低版本设备不支持这些新属性。
  • 检查一下Flutter的MaterialApp主题里有没有设置navigationBarTheme,如果有的话,要确保和你原生主题的设置不冲突。
  • 如果还是不生效,重启一下模拟器或者清理一下Android项目的构建缓存(在android目录下执行./gradlew clean),有时候缓存会导致设置不生效。

我当时就是用第一种方案搞定的,你可以先试试这个,有问题随时交流哈!

火山引擎 最新活动