codecamp

Environment:设备环境查询

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

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

Environment内置参数

数据类型

描述

accessibilityEnabled

boolean

获取无障碍屏幕读取是否启用。

colorMode

ColorMode enum

色彩模型类型:选项为ColorMode.light: 浅色,ColorMode.Dark: 深色。

fontScale

number

字体大小比例,范围: [0.85, 1.45]。

fontWeightScale

LayoutDirection

字体粗细程度,范围: [0.6, 1.6]。

layoutDirection

boolean

布局方向类型:包括LayoutDirection.LTR: 从左到右,LayoutDirection.RTL: 从右到左。

languageCode

string

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

使用场景

从UI中访问Environment参数

  • 使用Environment.EnvProp将设备运行的环境变量存入AppStorage中:
    1. // 将设备的语言code存入AppStorage,默认值为en
    2. Environment.EnvProp('languageCode', 'en');
  • 可以使用@StorageProp链接到Component中。
    1. @StorageProp('languageCode') lang : string = 'en';

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

说明

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

  1. // 将设备languageCode存入AppStorage中
  2. Environment.EnvProp('languageCode', 'en');
  3. @Entry
  4. @Component
  5. struct Index {
  6. @StorageProp('languageCode') languageCode: string = 'en';
  7. build() {
  8. Row() {
  9. Column() {
  10. // 输出当前设备的languageCode
  11. Text(this.languageCode)
  12. }
  13. }
  14. }
  15. }

应用逻辑使用Environment

  1. // 使用Environment.EnvProp将设备运行languageCode存入AppStorage中;
  2. Environment.EnvProp('languageCode', 'en');
  3. // 从AppStorage获取单向绑定的languageCode的变量
  4. const lang: SubscribedAbstractProperty<string> = AppStorage.Prop('languageCode');
  5. if (lang.get() === 'zh') {
  6. console.info('你好');
  7. } else {
  8. console.info('Hello!');
  9. }
PersistentStorage:持久化存储UI状态
@Watch装饰器:状态变量更改通知
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
HAR

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }