一、概述
Environment是ArkUI框架在应用程序启动时创建的单例对象,用于提供一系列描述应用程序运行状态的属性,其所有属性不可变(应用不可写入)且为简单类型,主要为AppStorage提供设备环境相关信息,以辅助应用根据设备环境做出不同的处理逻辑。
二、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参数
存入AppStorage并链接到Component
- 使用
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
- 使用
获取并使用环境变量
- 首先使用
Environment.envProp('languageCode', 'en');
将设备运行的languageCode
存入AppStorage。 接着从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');
})
})
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。