安卓状态栏文字配色修复

SKILL开发

原名 StatusBar 深色/浅色模式文字颜色适配 · 标识 statusbar-dark-light-fix

开发 未标注权限 许可证不明确
安装这个技能

解决应用切换深浅主题时状态栏时间、信号、电量等文字颜色不跟随变化的问题,针对国产系统覆盖样式的情况提供兜底方案。

一句话选型结论

按资料字段整理

安卓状态栏文字配色修复是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_bb1f0d09/statusbar-dark-light-fix
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_bb1f0d09仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量5.6 KBSKILL.md 原文大小,越大说明说明书写得越细

能做什么

0 项能力
上游给出的能力概览与适用场景
修复状态栏文字看不清适配深浅主题切换排查系统样式覆盖

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
安卓状态栏文字配色修复当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

5.6 KB
模型实际读到的说明书原文,来自技能仓库

StatusBar 浅色/深色模式文字颜色适配

问题描述

APP 端切换浅色/深色模式时,状态栏文字颜色不跟随主题变化:
- 浅色模式 × 白色背景 + 白色文字(看不见)
- 深色模式 ✓ 深色背景 + 白色文字(通常正常,但也是由相同机制控制)

根因

国产 ROM(小米 MIUI、魅族 Flyme)对系统状态栏 API 做了定制化,@capacitor/status-bar 的 StatusBar.setStyle() 在这些设备上可能被系统 UI 覆盖,导致文字颜色切换不生效。

解决方案:双保险策略

themeMode 切换
  → Capacitor StatusBar.setStyle()           (标准路径,普通 ROM 生效)
  → window.AppStatusBar.setLightStatusBars()  (原生兜底,系统级 API,ROM 无法拦截)

核心原则(⚠️ 铁律)

  1. overlay 必须用 false — setOverlaysWebView({ overlay: true }) 会破坏深色模式。绝对不要改!
  2. 必须同时使用 Capacitor API + 原生 Bridge — 两者缺一不可。Capacitor 覆盖标准设备,Bridge 覆盖国产 ROM。
  3. Bridge 调用必须加重试机制 — JS 端注册时 WebView 可能尚未就绪,需要最多 10 次、间隔 100ms 的重试。
  4. 修改 MainActivity.java 后,执行 npx cap sync android 同步 Java 源文件,再执行 ./gradlew assembleRelease。
  5. Android 11+ 和 6-10 要分别处理:前者用 WindowInsetsController,后者用 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR。

修改的文件

文件1: android/app/src/main/java/com/zhimaquan/app/MainActivity.java

添加 @JavascriptInterface 桥接类:

private class StatusBarBridge {
    @JavascriptInterface
    public void setLightStatusBars(final boolean light) {
        runOnUiThread(() -> {
            // Android 11+ (API 30+): 使用 WindowInsetsController
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                WindowInsetsController insetsController = window.getInsetsController();
                insetsController.setSystemBarsAppearance(
                    light ? WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS : 0,
                    WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
                );
            }
            // Android 6-10 (API 23-29): 使用 SYSTEM_UI_FLAG
            else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                int flags = decorView.getSystemUiVisibility();
                if (light) flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                else flags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                decorView.setSystemUiVisibility(flags);
            }
        });
    }
}

在 onCreate 中注册:

webView.addJavascriptInterface(new StatusBarBridge(), "AppStatusBar");

文件2: src/app/App.jsx

useEffect(() => {
  let cancelled = false;
  const updateStatusBar = async () => {
    // 1. Capacitor 标准 API
    const { StatusBar, Style } = await import('@capacitor/status-bar');
    StatusBar.setOverlaysWebView({ overlay: false });  // ← 绝对不能用 true
    if (mode === 'dark') {
      StatusBar.setStyle({ style: Style.Light });
      StatusBar.setBackgroundColor({ color: '#0d0d2b' });
    } else {
      StatusBar.setStyle({ style: Style.Dark });
      StatusBar.setBackgroundColor({ color: '#ffffff' });
    }

    // 2. 原生 JS Bridge 兜底(带重试)
    const tryBridge = (attempt = 0) => {
      if (cancelled) return;
      if (window.AppStatusBar) {
        // light=true → 浅色状态栏(深色文字),用于浅色模式
        // light=false → 深色状态栏(白色文字),用于深色模式
        window.AppStatusBar.setLightStatusBars(mode !== 'dark');
      } else if (attempt < 10) {
        setTimeout(() => tryBridge(attempt + 1), 100);
      }
    };
    tryBridge();
  };
  updateStatusBar();
  return () => { cancelled = true; };
}, [mode]);

构建部署流程

# 1. 构建 APP 前端
npx vite build --config vite.config.app.js

# 2. 同步 Capacitor(含 Java 源文件)
npx cap sync android

# 3. 构建 APK(含 Java 编译)
cd android && ./gradlew assembleRelease

# 4. 安装到手机
adb -s [设备序列号] install -r android/app/build/outputs/apk/release/app-release.apk

验证方法

  1. 打开 APP
  2. 切换到浅色模式 → 状态栏背景白色,文字深色 ✅
  3. 切换到深色模式 → 状态栏背景深蓝色,文字白色 ✅
  4. 反复切换 2-3 次确认无异常

常见陷阱

  • ❌ 不要使用 setOverlaysWebView({ overlay: true }) — 会导致深色模式状态栏文字也不显示
  • ❌ 不要只在 MainActivity.java 中加桥接而不加 JS 调用 — 桥接提供了通道,但需要 JS 主动调用
  • ❌ 不要一次性写太多 import — android.view.WindowInsetsController 需要 Android 11+,编译时需处理
  • ⚠️ build.gradle 中 compileSdk 需 >= 30 才能编译 WindowInsetsController
  • ⚠️ 如果 APK 安装了但 JS Bridge 不生效,检查是否漏了 npx cap sync android

常见问题

5 问
答案由本站依据条目字段整理
安卓状态栏文字配色修复怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_bb1f0d09/statusbar-dark-light-fix。安装方式为未标注。装完刷新技能列表或重开客户端。

安卓状态栏文字配色修复支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

安卓状态栏文字配色修复权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

安卓状态栏文字配色修复收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

安卓状态栏文字配色修复用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。