美文网首页@IT·互联网鸿蒙(HarmonyOS)开发知识
HarmonyOS NEXT应用开发之Environment:设

HarmonyOS NEXT应用开发之Environment:设

作者: 迪士尼在逃程序员 | 来源:发表于2024-08-01 15:16 被阅读0次

    开发者如果需要应用程序运行的设备的环境参数,以此来作出不同的场景判断,比如多语言,暗黑模式等,需要用到Environment设备环境查询。

    Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用程序运行状态的属性。Environment的所有属性都是不可变的(即应用不可写入),所有的属性都是简单类型。

    Environment内置参数

    数据类型 描述
    accessibilityEnabled boolean 获取无障碍屏幕读取是否启用。
    colorMode ColorMode 色彩模型类型:选项为ColorMode.LIGHT: 浅色,ColorMode.DARK: 深色。
    fontScale number 字体大小比例,范围: [0.85, 1.45]。
    fontWeightScale number 字体粗细程度,范围: [0.6, 1.6]。
    layoutDirection LayoutDirection 布局方向类型:包括LayoutDirection.LTR: 从左到右,LayoutDirection.RTL: 从右到左。
    languageCode string 当前系统语言值,取值必须为小写字母, 例如zh。

    使用场景

    从UI中访问Environment参数

    • 使用Environment.envProp将设备运行的环境变量存入AppStorage中:

      // 将设备的语言code存入AppStorage,默认值为en
      Environment.envProp('languageCode', 'en');
      
    • 可以使用@StorageProp链接到Component中。

      @StorageProp('languageCode') lang : string = 'en';
      

    设备环境到Component的更新链:Environment --> AppStorage -->Component。

    说明:

    @StorageProp关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数是不可写的,只能在Environment中查询。

    // 将设备languageCode存入AppStorage中
    Environment.envProp('languageCode', 'en');
    
    @Entry
    @Component
    struct Index {
      @StorageProp('languageCode') languageCode: string = 'en';
    
      build() {
        Row() {
          Column() {
            // 输出当前设备的languageCode
            Text(this.languageCode)
          }
        }
      }
    }
    

    应用逻辑使用Environment

    // 使用Environment.EnvProp将设备运行languageCode存入AppStorage中;
    Environment.envProp('languageCode', 'en');
    // 从AppStorage获取单向绑定的languageCode的变量
    const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');
    
    if (lang.get() === 'zh') {
      console.info('你好');
    } else {
      console.info('Hello!');
    }
    

    限制条件

    Environment和UIContext相关联,需要在 UIContext 明确的时候才可以调用。可以通过在 runScopedTask 里明确上下文。如果没有在UIContext明确的地方调用,将导致无法查询到设备环境数据。

    // EntryAbility.ets
    import UIAbility from '@ohos.app.ability.UIAbility';
    import window from '@ohos.window';
    
    export default class EntryAbility extends UIAbility {
      onWindowStageCreate(windowStage: window.WindowStage) {
        windowStage.loadContent('pages/Index');
        let window = windowStage.getMainWindow()
        window.then(window => {
          let uicontext = window.getUIContext()
          uicontext.runScopedTask(() => {
            Environment.envProp('languageCode', 'en');
          })
        })
      }
    }
    

    写在最后

    • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
    • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
    • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
    • 想要获取更多完整鸿蒙最新学习知识点,请移步前往小编:https://gitee.com/MNxiaona/733GH/blob/master/jianshu

    相关文章

      网友评论

        本文标题:HarmonyOS NEXT应用开发之Environment:设

        本文链接:https://www.haomeiwen.com/subject/vzpwtjtx.html