| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 10 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 9 个月前 | ||
| 9 个月前 | ||
| 1 个月前 | ||
| 10 个月前 | ||
| 10 个月前 | ||
| 1 个月前 | ||
| 9 个月前 |
使用UI上下文接口操作界面(UIContext)指南文档示例
介绍
本示例通过使用ArkUI指南文档中各场景的开发示例, 展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接:
效果预览
| ContextPage.ets | LocalStoragePage.ets |
|---|---|
使用说明
-
通过运行index.test.ets测试用例,使页面从Index页面跳到ContextPage页面,页面上显示getContext字样。
-
通过运行LocalStoragePage.test.ets测试用例,使页面从Index页面跳到LocalStoragePage页面,页面上显示LocalStoragePageHelloWorld字样。
工程目录
entry/src/main/ets/
|---Common
| |---ContextUtils.ets // 定义UIContext接口
| |---UIContext.ets //通过UIContext接口使用像素单位转换接口
| |---Utils.ets
| |---WindowUtils.ets
|---entryability
|---pages
| |---ContextPage.ets // 传入UIContext调用getHostContext
| |---LocalStoragePage.ets // 使用UIContext接口替换全局接口
| |---Index.ets
| |---CalendarPickerDialogPage.ets
| |---NewGlobal.ets
| |---VpPage.ets
| |---WindowTestPage.ets
entry/src/ohosTest/
|---ets
| |---Index.test.ets // 对应页面测试代码
| |---LocalStoragePage.test.ets // 对应页面测试代码
| |---CalendarPickerDialogPage.test.ets // 对应页面测试代码
| |---NewGlobal.test.ets // 对应页面测试代码
| |---VpPage.test.ets // 对应页面测试代码
| |---WindowTestPage.test.ets // 对应页面测试代码
具体实现
一、像素单位转换接口的UIContext替换(支持多实例适配)
- 定义静态成员uiContext存储全局UIContext,通过setUIContext方法在UI实例就绪后赋值(如Ability的loadContent回调中);
- 实现vp2px/fp2px/lpx2px方法:优先使用传入的uiContext或全局uiContext,若无效则vp2px通过display.getDefaultDisplaySync获取默认屏幕密度计算,fp2px/lpx2px返回undefined以保持行为一致;
- 调用uiContext.isAvailable()验证UIContext有效性,避免异常。
二、Ability的Context获取(基于UIContext绑定)
- 定义静态成员context存储默认Ability Context,通过setContext方法在Ability onCreate时赋值(直接使用Ability的this.context);
- 实现getContext方法:优先通过传入的uiContext.getHostContext()获取当前UI实例所属Ability的Context,无传入时返回默认context。
三、LocalStorage的UIContext替换(页面级共享存储)
- 页面组件通过@Entry({useSharedStorage: true})启用共享LocalStorage,替代全局LocalStorage.getShared();
- 通过uiContext.getSharedLocalStorage()获取当前UI实例关联的共享存储,支持setOrCreate/读取操作;
- 在Ability的onWindowStageCreate中,创建LocalStorage实例并传入windowStage.loadContent,确保页面初始化时获取到存储实例。
四、多窗口UIContext管理(基于窗口获焦状态)
- 实现registerWindowCallback方法:为窗口注册windowEvent监听,当窗口触发WINDOW_ACTIVE(获焦)时,调用window.getUIContext()记录为activeUIContext;
- 实现vp2px方法:优先使用传入的uiContext或activeUIContext,无效时通过display.getDefaultDisplaySync获取密度计算;
- 提供unregisterWindowCallback方法,在窗口销毁前注销监听,避免内存泄漏。
相关权限
不涉及。
依赖
不涉及。
约束与限制
1.本示例仅支持标准系统上运行, 支持设备:Mate 70 Pro、开发板。
2.本示例为Stage模型,支持API20版本SDK,版本号:6.0.0.47,镜像版本号:OpenHarmony_6.0.0.47。
3.本示例需要使用DevEco Studio 6.0.0 Release (Build Version: 6.0.0.858, built on September 24, 2025)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/DocsSample/ArkUISample/UIContext > .git/info/sparse-checkout
git remote add origin https://gitcode.com/openharmony/applications_app_samples.git
git pull origin master