HarmonyOS 鸿蒙Next Web组件:H5页面字体如何跟随系统字体大小变化

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

涉及知识点:

1、configuration标签:用于指定描述应用字体大小跟随系统变更的配置文件

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-configuration-file-V5#configuration标签

2、订阅系统环境变量的变化:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/subscribe-system-environment-variable-changes-V13#在uiability组件中订阅回调

3、textZoomRatio(Web组件属性):设置页面的文本缩放百分比,默认为100

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-basic-components-web-V13#textzoomratio9

实现逻辑核心代码:

1、配置APP字体大小跟随系统(参考知识点1)

在AppScope/app.json5文件中添加"configuration": “$profile:configuration”

{
  "app": {
    "configuration": "$profile:configuration"  
  }
}

在开发视图的AppScope/resources/base/profile下面定义配置文件configuration.json

{
  "configuration": {
    "fontSizeScale": "followSystem",
    "fontSizeMaxScale": "3.2"
  }
}

2、订阅系统环境变量的变化(参考知识点2)

UIAbility组件提供了UIAbility.onConfigurationUpdate()回调方法用于订阅系统环境变量的变化。当系统环境变量发生变化时,会调用该回调方法。在该方法中,通过Configuration对象获取最新的系统环境配置信息,而无需重启UIAbility。

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    systemFontSize = this.context.config.fontSizeScale; // UIAbility实例首次加载时,系统当前字体大小
    AppStorage.setOrCreate('systemFontSize', systemFontSize); // 保存systemFontSize
  }
onConfigurationUpdate(newConfig: Configuration): void { // import { Configuration } from '[@kit](/user/kit).AbilityKit'; 否则该方法不生效
    hilog.info(DOMAIN_NUMBER, TAG,
      `onConfigurationUpdated systemFontSize is ${systemFontSize}, newConfig: ${JSON.stringify(newConfig)}`);

    if (systemFontSize !== newConfig.fontSizeScale) {
      hilog.info(DOMAIN_NUMBER, TAG, `systemFontSize from ${systemFontSize} changed to ${newConfig.fontSizeScale}`);
      systemFontSize = newConfig.fontSizeScale; // 将变化之后的字体大小保存,作为下一次变化前的字体大小
      AppStorage.setOrCreate('systemFontSize', systemFontSize); // 保存systemFontSize
    }
  }

3、Web组件配置textZoomRatio属性值

import { webview } from '[@kit](/user/kit).ArkWeb';

[@Entry](/user/Entry)
[@Component](/user/Component)
struct WebTextRatio {
  private controller: webview.WebviewController = new webview.WebviewController();
  [@StorageProp](/user/StorageProp)("systemFontSize") fontSizeScale: number = 100

  build() {
    Column() {
      Text("系统字体大小比例:" + this.fontSizeScale)
      Web({ src: $rawfile('webRatio.html'), controller: this.controller })
        .domStorageAccess(true)
        .javaScriptAccess(true)
        .zoomAccess(true)
        .textZoomRatio(this.fontSizeScale * 100) // 设置页面的文本缩放百分比,默认为100
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next Web组件:H5页面字体如何跟随系统字体大小变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next Web组件:H5页面字体如何跟随系统字体大小变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next Web组件的H5页面字体要跟随系统字体大小变化,可以通过以下方式实现:

  1. CSS媒体查询:利用CSS的媒体查询功能,根据系统字体大小的变化动态调整H5页面的字体大小。虽然这不是直接监听系统字体变化,但通过媒体查询的断点设置,可以模拟出类似的效果。

  2. 系统主题监听:在HarmonyOS的JavaScript API中,有监听系统主题变化的功能。虽然不直接针对字体大小,但主题变化往往包含字体大小的调整。监听主题变化后,可以动态调整页面的CSS样式。

  3. 自定义属性与JavaScript:在H5页面中,使用CSS自定义属性(如--font-size)来定义字体大小,然后通过JavaScript监听系统字体大小的变化(如果系统提供了相关API或事件),并更新自定义属性的值,从而改变字体大小。

  4. 使用系统样式:尽可能使用系统默认的CSS样式,这样当系统字体大小变化时,这些样式会自动更新。例如,使用rem单位代替px单位,因为rem单位是相对于根元素(html)的字体大小,而根元素的字体大小通常由系统控制。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部