文章目录
- 效果图
- 文件在哪里
- 先看音乐卡片配置
- name:卡片的身份证
- src:普通卡片页面路径
- isDynamic:动态卡片能力
- defaultDimension 和 supportDimensions:尺寸必须对上
- sceneAnimationParams:互动卡片的关键
- 快递卡片多了 metadata
- 新增一张卡片怎么配
- 排查清单
- 写在最后
form_config.json是小白最容易忽略的文件。你写了漂亮的 ArkUI 页面,结果系统根本找不到它,大概率就是这里没配对。
这篇就专门讲它。目标很简单:让你知道每个字段是干什么的,改卡片时应该改哪里,出了问题先查哪里。
效果图
form_config.json决定普通卡片和 LiveForm 怎么配对。配置对了,点击普通卡片后,系统才能拉起对应的展开效果。
这篇就把“为什么配置能牵起普通卡片和 LiveForm”讲明白。
文件在哪里
项目里的配置文件在:
entry/src/main/resources/base/profile/form_config.json里面注册了四张普通卡片:
SleepCardDeliveryCardExerciseCardMusicCard
它们分别对应睡眠、快递、运动、音乐四个互动卡片场景。
先看音乐卡片配置
{"name":"MusicCard","displayName":"$string:MusicCard","description":"$string:MusicCardDes","src":"./ets/widget/pages/MusicCard.ets","uiSyntax":"arkts","window":{"designWidth":720,"autoDesignWidth":true},"colorMode":"auto","isDynamic":true,"isDefault":false,"updateEnabled":false,"scheduledUpdateTime":"10:30","updateDuration":1,"defaultDimension":"2*4","supportDimensions":["2*4"],"sceneAnimationParams":{"abilityName":"MusicLiveCardAbility"}}字段多,但小白先抓住 5 个核心字段就够了:
namesrcisDynamicdefaultDimensionsceneAnimationParams.abilityName
name:卡片的身份证
"name":"MusicCard"name是卡片名。主页添加卡片时传的form_name,必须和这里一致。
比如Index.ets里最终会传:
'ohos.extra.param.key.form_name':config.cardName如果config.cardName是MusicCard,那form_config.json里就必须有MusicCard。
src:普通卡片页面路径
"src":"./ets/widget/pages/MusicCard.ets"这个字段指向普通桌面卡片页面。
注意,不是 LiveForm 页面。
也就是说,音乐普通卡片是:
entry/src/main/ets/widget/pages/MusicCard.ets音乐互动页面是:
entry/src/main/ets/livecardability/pages/MusicLiveCard.etssrc写前者,不写后者。
isDynamic:动态卡片能力
"isDynamic":true当前项目里四张卡片都设置为动态卡片。这样应用侧才能通过formProvider.updateForm()给桌面卡片下发数据。
比如音乐播放状态、歌曲标题、收藏状态,都是动态更新的。
如果你做的是纯静态展示卡片,可以不需要复杂刷新。但这个项目是互动卡片,建议保持true。
defaultDimension 和 supportDimensions:尺寸必须对上
音乐卡片是:
"defaultDimension":"2*4","supportDimensions":["2*4"]快递卡片是:
"defaultDimension":"2*2","supportDimensions":["2*2"]如果主页添加时传了2*4,但这里的supportDimensions只有2*2,就会出问题。
小白改尺寸时,记得同时改这两处:
form_config.json- 主页卡片配置
CARD_ITEM_CONFIGS
sceneAnimationParams:互动卡片的关键
这是互动卡片最重要的字段:
"sceneAnimationParams":{"abilityName":"MusicLiveCardAbility"}它告诉系统:这张普通卡片展开互动区时,应该找哪个 LiveForm Ability。
MusicLiveCardAbility必须在module.json5里注册:
{ "name": "MusicLiveCardAbility", "srcEntry": "./ets/livecardability/MusicLiveCardAbility.ets", "type": "liveForm" }两个名字必须完全一致。
快递卡片多了 metadata
快递卡片配置里有:
"metadata":[{"name":"isSupportShake","value":"true"}]这表示快递卡片支持摇动/传感器类交互。因为快递 LiveForm 里会用陀螺仪,所以这里加了额外元信息。
小白可以先不用深究 metadata,但要知道:某些卡片能力不是只靠页面代码,还会在配置里声明。
新增一张卡片怎么配
假设你要新增一个天气卡片,最小配置可以这样写:
{"name":"WeatherCard","displayName":"$string:WeatherCard","description":"$string:WeatherCardDes","src":"./ets/widget/pages/WeatherCard.ets","uiSyntax":"arkts","window":{"designWidth":720,"autoDesignWidth":true},"colorMode":"auto","isDynamic":true,"isDefault":false,"updateEnabled":false,"defaultDimension":"2*2","supportDimensions":["2*2"],"sceneAnimationParams":{"abilityName":"WeatherLiveCardAbility"}}然后你还要去module.json5注册:
{ "name": "WeatherLiveCardAbility", "srcEntry": "./ets/livecardability/WeatherLiveCardAbility.ets", "type": "liveForm" }只改form_config.json不够。普通卡片和 LiveForm Ability 要一起补齐。
排查清单
互动卡片打不开时,先查这几项:
name是否和添加时传入的form_name一致。src文件是否真实存在。defaultDimension是否在supportDimensions里。sceneAnimationParams.abilityName是否存在。module.json5是否注册了同名liveForm。type是否写成liveForm。
写在最后
form_config.json是普通卡片和 LiveForm 的牵线人。普通卡片能不能被系统识别、能不能展开互动区,很多时候就卡在这里。
小白记住一句话:src找普通卡片,abilityName找 LiveForm。