android_system_font_weight 0.3.1 copy "android_system_font_weight: ^0.3.1" to clipboard
android_system_font_weight: ^0.3.1 copied to clipboard

启动期一次性读取安卓厂商(HyperOS/MIUI、ColorOS、OriginOS、MagicOS 等)的 系统全局可变字重设置,归一化为 wght 轴值。无监听、无刷新,读不到返回 null。

android_system_font_weight #

启动期一次性读取安卓系统全局可变字重(wght 轴),归一化后返回给 Flutter。 无监听、无刷新——设计给"应用启动时注入一次"的场景。

背景 #

国内厂商(HyperOS/MIUI、ColorOS、OriginOS、MagicOS)的"字重调节"滑杆是 framework 私有实现:滑杆值写在各家私有 Settings 键里,注入逻辑钩在 Typeface/minikin 上,只对走官方文本管线的原生应用生效。Flutter 自带文本栈 (SkParagraph + Skia/Impeller),既跑不到厂商钩子、也读不到私有键,因此 系统字重对 Flutter 文本无效。本插件负责把"读私有键"这一半补上,拿到值后 由应用侧(如 ElStyle.fontVariations / TextStyle.fontVariations)注入。

用法 #

final wght = await AndroidSystemFontWeight.getWght(); // double? 100–1000
if (wght != null) {
  // 注入根样式,例如 ElApp(style: ElStyle(fontVariations: [FontVariation('wght', wght)]))
}

前提:实际渲染的字体必须是带 wght 轴的可变字体(MiSans VF / OPPO Sans VF / HarmonyOS Sans VF 等,国内新机系统字体均满足)。静态字体设轴无效。

探测策略(三层) #

  1. 候选键直读candidateKeys 清单里的厂商键(社区推测 + 通用命名, 无公开文档,命中即用);
  2. 全表扫描:查询 content://settings/{system,secure,global} 全部行, 过滤 font/weight/wght/bold 相关键,按启发式归一化(主力路径,可自 发现任意厂商私有键;font_scale 是字号缩放,已排除);
  3. AOSP 兜底Configuration.fontWeightAdjustment(Android 12+ 粗体 无障碍,布尔粒度 +300)。

值域启发式:'wght' 350 字符串 → 直取;100–1000 → 绝对 wght;(0, 5] 小数 → ×400 倍率;[-300, 0) → 400+增量;其余语义不明返回 null。

真机定位厂商键 #

getWght() 返回 null 但系统明明有字重滑杆时:

debugPrint((await AndroidSystemFontWeight.debugDump()).toString());

adb shell settings list system | findstr /i "font weight",对比拖动 滑杆前后的差异行,把命中的键补进 AndroidSystemFontWeightPlugin.candidateKeys 钉死(也欢迎顺手校正该键的 值域归一化)。

0
likes
0
points
142
downloads

Publisher

unverified uploader

Weekly Downloads

启动期一次性读取安卓厂商(HyperOS/MIUI、ColorOS、OriginOS、MagicOS 等)的 系统全局可变字重设置,归一化为 wght 轴值。无监听、无刷新,读不到返回 null。

License

unknown (license)

Dependencies

flutter, jni

More

Packages that depend on android_system_font_weight

Packages that implement android_system_font_weight