Environment是ArkUI框架在应用程序启动时创建的单例对象,用于提供一系列描述应用程序运行状态的属性,其所有属性不可变(应用不可写入)且为简单类型,主要为AppStorage提供设备环境相关信息,以辅助应用根据设备环境做出不同的处理逻辑。
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
。Environment.envProp('languageCode', 'en');
将设备运行的环境变量(如语言code)存入AppStorage,其中'en'
为默认值。@StorageProp('languageCode') lang : string = 'en';
将其链接到Component中,实现设备环境到Component的更新链:Environment --> AppStorage --> Component
。@StorageProp
关联的环境参数可以在本地更改,但不能同步回AppStorage中,因为应用对环境变量参数不可写,只能查询。例如:// 将设备languageCode存入AppStorage中 Environment.envProp('languageCode', 'en'); @Entry @Component struct Index { @StorageProp('languageCode') languageCode: string = 'en'; build() { Row() { Column() { // 输出当前设备的languageCode Text(this.languageCode) } } } }
Environment.envProp('languageCode', 'en');
将设备运行的languageCode
存入AppStorage。languageCode
变量,如const lang: SubscribedAbstractProperty<string> = AppStorage.prop('languageCode');
,然后根据该变量的值进行逻辑判断,例如:// 使用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
里明确上下文,否则将导致无法查询到设备环境数据。例如在EntryAbility.ets
中:
import { UIAbility } from '@kit.AbilityKit'; import { window } from '@kit.ArkUI'; 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'); }) }) } }