首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
HarmonyOS
发新帖
0
0
[原创]【FAQ】HarmonyOS SDK 闭源开放能力 — Form Kit
发表于: 2025-11-6 11:16
3365
[原创]【FAQ】HarmonyOS SDK 闭源开放能力 — Form Kit
HarmonyOS SDK
2025-11-6 11:16
3365
**1.问题描述:** 主app进入后台,此时切换系统菜单暗黑模式按钮,卡片如何监听系统colorMode ,此时卡片如何做暗黑模式切换? **解决方案:** 适配方案依靠资源目录,当系统对应的设置项发生变化后(如系统语言、深浅色模式等),应用会自动加载对应资源目录下的资源文件。系统为深色模式预留了dark目录,该目录在应用创建时默认不存在,在进行深色模式适配时,需要开发者在src/main/resources中手动创建出dark目录,将深色模式所需的资源放置到该目录下。对于浅色模式所需的资源,可以放入默认存在的src/main/resources/base目录下。具体步骤为: 1. 在src/main/resources/base/element/color.json文件中定义页面元素在浅色模式下的颜色值。 ```Json { "color": [ { "name": "text_color", "value": "#000000" } ] } ``` 2. 在src/main/resources/dark/element/color.json文件中定义页面元素在浅色模式下的颜色值。 ```Json { "color": [ { "name": "text_color", "value": "#FFFFFF" } ] } ``` 3. 在代码中引用自定义的颜色资源值,使用$r加载自定义颜色资源,系统将自动在应用深浅色变化时,加载对应限定词目录下的资源文件,从而改变页面元素的颜色完成深浅色适配。 ```TypeScript @Entry @Component struct Card { build() { Row() { Text('hello') .fontColor($r('app.color.text_color')) } .width('100%') .height('100%') } } ``` **2.问题描述:** FormExtensionAbility生命周期中提供了onConfigurationUpdate生命周期回调,该生命周期回调在系统深浅色模式发生变化时是否会触发? **解决方案:** 因系统规格设计,当系统配置项变更时,仅系统应用拉活应用服务卡片对应的EntryFormAbility并触发相应的onConfigurationUpdate回调函数。 三方应用仅当FormExtensionAbility存活时才会触发onConfigurationUpdate回调。 **3.问题描述:** 通过mediaquery.matchMediaSync接口可以设置媒体查询的查询条件,是否可以通过mediaquery.matchMediaSync('(dark-mode: true)')直接在卡片页面注册系统深浅色监听回调? **解决方案:** 由于卡片规格限制,虽然该接口支持在ArkTS卡片页面中使用,但是无法监听获取查询结果。 **4.问题描述:** 是否可以使用PersistentStorage和AppStorage在应用和卡片之间进行状态数据共享? **解决方案:** 卡片和应用的主进程不是一个进程,而AppStorage是和进程绑定的,仅支持应用的主线程内多个UIAbility实例间的UI状态数据共享,所以卡片和应用主进程之间无法使用PersistentStorage和AppStorage进行状态数据共享。 **5.问题描述:** 跨进程经常需要数据共享如服务卡片和其主应用,但在主应用更新首选项数据后,在服务卡片中用取到的值错误的场景。 **解决方案:** 不同进程的内存不共享,同一进程中getPreferences只有首次会从持久化中取,所以要跨进程读取最新的持久化数据时,需先通过preferences.removePreferencesFromCache接口将Preferences实例移出缓存中的实例之后,再次getPreferences将会重新读取持久化文件,生成新的Preferences实例。 以主应用中更新首选项中的data,在服务卡片中通过首选项取data为例。 在主应用中更新data,并通知服务卡片更新。 ``` preferences.getPreferences(this.context, 'myPreference', (err: BusinessError, pf: preferences.Preferences) => { if (err) { console.error("Failed to get preferences. code =" + err.code + ", message =" + err.message); return; } pf.put("formData", data); pf.flush(); formProvider.updateForm(curFormId, formMsg); console.info("Succeeded in getting preferences."); }) ``` 卡片中收到更新事件如onFormEvent方法回调时,需要先通过removePreferencesFromCache清缓存的Preferences实例再重新取Preferences实例。 ``` async function getCache() { await preferences.removePreferencesFromCache(context, 'myPreference'); const pf = await preferences.getPreferences(context, 'myPreference'); const data = await pf.get('formData', 'fault'); console.info("cache data: " + data); } ```
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。
收藏
・
0
点赞
・
0
打赏
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
0
)
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
HarmonyOS SDK
258
发帖
190
回帖
0
RANK
关注
私信
他的文章
[原创]HarmonyOS智慧多窗,让应用在任意窗口都“恰到好处”
270
[原创]AI 赋能 Push Kit 场景化消息开发,高效完成鸿蒙应用推送能力接入
472
[原创]HarmonyOS Push Kit 自分类权益 Skill,助力提升权益申请通过率
521
[原创]基于增强QUIC协议优化弱网下的直播观看体验
697
[原创]焕新鸿蒙应用权限管理方案,应用授权体验再升级
609
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部