文档管理中心

Environment:设备环境查询

如果开发者需要获取应用程序运行设备的环境参数(如多语言、深浅色模式等)以进行不同的场景判断,可以使用Environment设备环境查询。

Environment是ArkUI框架在应用程序启动时创建的单例对象,为AppStorage提供应用程序运行状态的属性。所有属性都是不可变的简单类型。

Environment提供了读取系统环境变量并将其值写入AppStorage的功能。开发者需要通过AppStorage获取环境变量的值。详细信息请参阅 Environment 内置参数

在阅读本文档前,建议提前阅读:AppStorage

Environment内置参数

展开
数据类型 描述
accessibilityEnabled string 是否启用无障碍屏幕阅读。'true'表示启用,'false'表示不启用。
colorMode ColorMode

色彩模式类型。

- ColorMode.LIGHT:浅色。

- ColorMode.DARK:深色。

fontScale number

字体大小比例。开发者需要配置configuration,设置fontSizeScale为"followSystem",具体配置步骤可参考configuration使fontScale跟随系统变化。

默认值跟随系统默认参数。

fontWeightScale number

字体粗细缩放比例。在不同的系统或者机型中,fontWeightScale的取值范围可能会有所不同。

默认值跟随系统默认参数。

layoutDirection LayoutDirection

布局方向类型:

- LayoutDirection.LTR:从左到右。

- LayoutDirection.RTL:从右到左。

languageCode string

当前系统语言值,取值必须为小写字母(例如:zh)。

默认值跟随系统默认参数。

限制条件

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

收起
自动换行
深色代码主题
复制
  1. import { UIAbility } from '@kit.AbilityKit';
  2. import { window } from '@kit.ArkUI';
  3. export default class EntryAbility extends UIAbility {
  4. onWindowStageCreate(windowStage: window.WindowStage) {
  5. windowStage.loadContent('pages/Index');
  6. let mainWindow = windowStage.getMainWindow();
  7. mainWindow.then(mainWindowInstance => {
  8. let uiContext = mainWindowInstance.getUIContext();
  9. // Environment在UIContext.runScopedTask里调用明确上下文
  10. uiContext.runScopedTask(() => {
  11. Environment.envProp('languageCode', 'en');
  12. });
  13. });
  14. }
  15. }

使用场景

从UI中访问Environment参数

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

    收起
    自动换行
    深色代码主题
    复制
    1. // 将设备的languageCode存入AppStorage,默认值为en
    2. Environment.envProp('languageCode', 'en');
  • 在自定义组件中通过@StorageProp获取languageCode的值。

    收起
    自动换行
    深色代码主题
    复制
    1. @StorageProp('languageCode') lang: string = 'en';

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

说明

应用无法修改环境变量参数,因此使用@StorageProp获取。这样即使在组件内修改,也不会同步回AppStorage中,影响其他组件处获取环境变量的结果。

收起
自动换行
深色代码主题
复制
  1. // 将设备languageCode存入AppStorage中
  2. Environment.envProp('languageCode', 'en');
  3. @Entry
  4. @Component
  5. struct UiEnvironment {
  6. @StorageProp('languageCode') languageCode: string = 'en';
  7. build() {
  8. Row() {
  9. Column() {
  10. // 输出当前设备的languageCode
  11. Text(this.languageCode)
  12. .fontSize(20)
  13. .margin(10)
  14. }
  15. .width('100%')
  16. }
  17. .height('100%')
  18. }
  19. }

应用逻辑使用Environment

收起
自动换行
深色代码主题
复制
  1. import { hilog } from '@kit.PerformanceAnalysisKit';
  2. const DOMAIN = 0x0001;
  3. const TAG = 'environmentalProject';
  4. // 使用Environment.envProp将设备运行languageCode存入AppStorage中
  5. Environment.envProp('languageCode', 'en');
  6. // 从AppStorage获取单向绑定的languageCode的变量
  7. const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');
  8. if (lang.get() === 'zh') {
  9. // 请将$r('app.string.AppliedLogic_Hello')替换为实际资源文件,在本示例中该资源文件的value值为"你好"
  10. hilog.info(DOMAIN, TAG, `${$r('app.string.AppliedLogic_Hello')}`);
  11. } else {
  12. hilog.info(DOMAIN, TAG, 'Hello!');
  13. }
在 开发与测试 开放能力API 中进行搜索
请输入您想要搜索的关键词