把状态栏里的 Wi-Fi、移动信号、电量 合并成一个仿 iPhone「Duo」风格的三合一图标。
HyperDuo 是一个 LSPosed 模块,只作用于系统界面(com.android.systemui)。开启后,原本分开的
Wi-Fi 图标、信号格与电池图标被替换成一个整体字形:外圈是电池环(缺口在下方,按电量点亮),
环里是 Wi-Fi 弧线(弧数跟随真实信号强度),底部是移动信号点,环内是电量数字(充电
时变成闪电,快充为琥珀色)。
所有元素都能单独开关,尺寸和颜色可以按自己的状态栏习惯微调,改完立即生效,无需重启。 关掉其中任何一项,对应的系统原生图标都会回到原本的位置——每个开关都是「用三合一的画法」与 「用系统原本的画法」之间的切换,而不是简单地少画一笔。
从左到右:充电、快充、正常、无 Wi-Fi(显示网络类型)、省电、危险。这套预览也内置在设置界面顶部, 会跟着你的设置实时变化。
- 系统:HyperOS / MIUI
- Android:10 及以上(API 29+)
- 框架:支持 libxposed API 102 的 LSPosed,例如 LSPosed 2.2.0-it(7890)
- 作用域:系统界面(
com.android.systemui)
目前只在 小米 14 · HyperOS 4 · Android 17(API 37) 上做过完整验证。其他 HyperOS / MIUI 机型 理论可用;状态栏内部实现不同时,对应功能会自动跳过并写下日志,不会崩溃。
- 从 Releases 下载最新的
HyperDuo-*.apk并安装。包名已更换:从 1.4 起是
io.github.yixing233.hyperduo(1.3 及更早是com.hyperduo.trio)。 包名变了就是另一个应用,无法覆盖升级:请先卸载旧版(设置会一起清掉),再安装新版。 - 打开 LSPosed 管理器 → 模块 → 启用 HyperDuo。
- 在模块的作用域里勾选 系统界面。
- 重启系统界面让模块生效。
安装后桌面会出现 HyperDuo 图标,点开即可;也可以在 LSPosed 管理器里点击模块进入。
字形画在独立窗口里。 状态栏窗口只有约 43dp 高,三合一要完整显示需要更高,超出的部分过去会被 窗口边界直接裁掉。「独立窗口绘制」默认开启:字形被画进一个只属于它自己的小窗口(不接收触摸), 完整可见,不再被状态栏高度截断;代价是图形下半部分会露在状态栏背景之外。下拉通知栏、进最近 任务、应用启动动画、全屏应用隐藏状态栏、充电动画岛接管时,独立窗口都会先让位、由状态栏内的绘制 路径顶上,状态栏恢复静止后再回来。关掉开关即回到原来的状态栏内绘制。
双卡分两排画。 打开「双卡信号」后改成上下两排信号点,上排是卡一、下排是卡二。圆环样式下
两排点正好落在圆环的两个缺口里:上排把 12 点钟的缺口张到与底部开口等宽。圆环顶部只有一个缺口,
占用顺序是「双卡 → Wi-Fi 弧 → 环内网络类型」,都不满足时圆环闭合成整圆;只有环内充电闪电
(需同时开启「充电时显示闪电」)排在最前。信号电平与系统状态栏取同一个来源(MIUI 的
getMiuiLevel()),不会出现「系统满格、这里少一格」。
信号也可以画在环外。 把「信号位置」改成环外,移动信号就从圆环底部挪到电池图标旁,和原生 信号格同一个位置。此时打开「堆叠信号」,模块自己接管那一处读数:四条高度递增的圆头柱表示一张 卡,下方一排圆点表示另一张卡;双卡还能再打开「仅显示上网卡」。关闭「堆叠信号」则把移动信号 整体交还系统原生信号格。环外读数的大小由「环外信号大小」单独控制,按 dp 而不是百分比——默认 15dp 正好与图标同高,且不随状态栏那一行(下拉控制中心时会变高)变化。读数离电池的间距也能用 「环外信号间距」调整,它是会占位的边距——调大时读数远离电池、原生图标同时让出同样宽度, 不会压到旁边的图标上。
「5GA」里的 A 会小一号。 网络类型以 A 结尾时(5GA、4GA 之类),末尾的 A 按一个独立比例缩小、 底边与主字对齐,默认 65%(照着参考图量的),环内环外都生效。环外网络类型标签左右两条边距也能 分别调,想让它离图标近一点或远一点都可以。
两种排布、两种重心。 「三合一样式」可以换成矩形:左右两列信号点夹住中间内容,底部是一条 电量条。打开「电量数字居中」则把数字放大到环心,Wi-Fi 弧缩到顶部缺口,充电时改用缺口里的小闪电。
电池旁边还能看充电功率和温度。 「充电功率」显示的是电池自身电流的幅值 × 电压,也就是真正充进 电池的功率——随电量升高会逐渐变小,刻意不取充电器协商的最大档位;电流的正负号各家平台不一致 (本机充电时答负数),所以只取幅值。没接充电器时这一段直接不显示 (而不是显示 0W)。「电池温度」取整到整摄氏度,不接充电器一样显示。两项默认都关、开关各自 独立,共用电池图标旁的同一处位置,且一项占一行:只开一项就只显示那一项,两项都开则上下两行 显示。读数以「环外网络类型字号」为基准:只开一项时与环外标签一样大,两项都开时按电池图标的 高度自适应缩小,让两行合起来不高于一个图标;空间实在太窄时会在基准字号的六成处封底,此时两行 会略微高过图标一点,而不会缩到看不清。这个基准之上还有「读数整体尺寸」可以整体放大或缩小 (60 – 150%),以及「读数字重」调它们的笔画粗细(100 – 900);两项设置都只作用于这两项读数, 只开一项时也照常生效。
整个字形也能整体缩放。 「图标整体尺寸」把三合一字形作为一个整体缩放(60 – 100%), 描边、弧线与数字按同一比例一起变,字形始终居中。它只能往小缩:系统给电池图标预留的框只有 约 28dp × 20dp,100% 已经是这个框允许的最大值,再大只会画到框外去。
两项读数的字号与字重也能单独调。 在自适应字号之上还有「读数整体尺寸」(60 – 150%,可大 可小)整体缩放这两项读数,「读数字重」(100 – 900)调它们的笔画粗细。
颜色跟着状态走。 低电量、充电、危险电量可以分别为深色底和浅色底各设一套颜色,优先级是 危险电量 → 低电量 / 省电 → 充电 → 前景色;底纹与未激活的信号点跟随状态栏本身的前景色。
全部设置项与默认值见主仓库说明。
改完设置需要重启系统界面吗?
不需要,模块通过框架的远程配置通道实时接收变更,改完立刻重绘。如果确实需要重启(例如刚装上模块、 或系统界面状态异常),设置里提供了重启入口,它需要 root 授权。
状态栏完全没有变化?
依次确认:模块已在 LSPosed 中启用 → 作用域勾选了「系统界面」→ 已经重启过系统界面。显示「已激活」 但图标没变,通常就是作用域没勾选。若三者都满足仍无效,请检查是否还有别的状态栏模块在改同一区域。
升级后设置全没了、LSPosed 里还多出一个同名模块?
包名换了(com.hyperduo.trio → io.github.yixing233.hyperduo),Android 会当成两个不同的应用:
旧版不会自动升级、旧设置不会迁移、LSPosed 里两条并列。卸载旧的那条,只留新版即可。
打开「双卡信号」后还是只画一排点?
两排点需要三个条件同时成立:手机确实是双卡、两张卡都读到了电平、并且没有在画环内充电闪电。 任何一条不满足就回退成单排(当前上网卡)。注意抑制它的不是"在充电"而是"画闪电"——若「充电时 显示闪电」是关的,插着充电器时两排点照样会画出来。
几个已知限制
- 「关了 Wi-Fi 弧还在」:不会。Wi-Fi 的有无有实时采样兜底;但信号等级依赖系统界面内部 的资源名解析,个别固件改走别的绑定路径时,弧线可能只显示为不点亮(不会崩溃)。
- 切换「显示移动信号点」后没有马上变化:信号点只在信号等级变化时刷新。系统界面在移动视图淡出后 仍报告「可见」,模块无法从中判断开关状态,需等下一次信号变化或重启系统界面。
- 字号调大后字形被裁切:系统给电池图标预留的区域是固定的(28dp × 20dp),几何参数只改变绘制 内容、不改变预留尺寸。极端值下字形可能超出可用范围,调小一点即可。
- 源码与说明:https://github.com/yixing233/HyperDuo
- 问题反馈:https://github.com/yixing233/HyperDuo/issues
- 最新版本:https://github.com/yixing233/HyperDuo/releases/latest
设置界面基于 Compose + Miuix 实现 MIUI 风格。

