HarmonyOS 鸿蒙Next:添加多个尺寸的卡片时,如何匹配传递的不同背景图及数据
HarmonyOS 鸿蒙Next:添加多个尺寸的卡片时,如何匹配传递的不同背景图及数据 在添加不同尺寸的卡片时 传递的数据以及卡片背景图尺寸大小均不同 我在更新数据的时候 如何对不同尺寸的卡片进行各自的数据更新?
求助各位走过路过的大佬
更多关于HarmonyOS 鸿蒙Next:添加多个尺寸的卡片时,如何匹配传递的不同背景图及数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我当前的应用有多个尺寸的卡片,比如有 “22", "24”,“4*4” 这三个尺寸,我现在需要获取用户添加到桌的的 formId 进行缓存来方便后续的业务,我一开始是通过 FormExtensionAbility 中的 onAddForm 来获取,但是我发现当用户长按 App 的 icon 选择添加服务卡片时,onAddForm 函数就会被调用三次,给出三个不同尺寸的卡片 ID,而我无法得知用户真正添加的卡片对应ID 是哪个,请问这种情况下最合理的方式是如何获取用户添加到桌面的卡片 ID?
期待HarmonyOS能在未来带来更多创新的技术和理念。
getFormsInfo:获取设备上当前应用程序的卡片信息,获取卡片名称 [https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-form-formprovider-V5#getformsinfo](https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-form-formprovider-V5#getformsinfo)
onAddForm方法中可以通过如下获取到formId
```javascript
const formId = want.parameters![formInfo.FormParam.IDENTITY_KEY] as string;
onUpdateForm(formId: string) 中可以直接获取formId 卡片的formId是随机分配的
每个卡片都有唯一的id,更新需要有id参数 建议在onAddForm中就将卡片的formId保存在一个键值对中
我添加了三个widget
-
名称: widget
显示名称: $string:widget_display_name
描述: $string:widget_desc
源码路径: ./ets/widget/pages/WidgetCard.ets
UI语法: arkts
窗口设计宽度: 720
自动设计宽度: 是
颜色模式: auto
动态: 否
默认: 是
更新启用: 是
计划更新时间: 10:30
更新时长: 1
默认尺寸: 22
数据代理启用: 是
支持尺寸: 22 -
名称: widget1
显示名称: $string:widget1_display_name
描述: $string:widget1_desc
源码路径: ./ets/widget1/pages/Widget1Card.ets
UI语法: arkts
窗口设计宽度: 720
自动设计宽度: 是
颜色模式: auto
动态: 否
默认: 否
更新启用: 是
计划更新时间: 10:30
更新时长: 1
默认尺寸: 24
数据代理启用: 是
支持尺寸: 24 -
名称: widget2
显示名称: $string:widget2_display_name
描述: $string:widget2_desc
源码路径: ./ets/widget2/pages/Widget2Card.ets
UI语法: arkts
窗口设计宽度: 720
自动设计宽度: 是
颜色模式: auto
动态: 否
默认: 否
更新启用: 是
计划更新时间: 10:30
更新时长: 1
默认尺寸: 44
数据代理启用: 是
支持尺寸: 44
使用getFormsInfo只能获取到第一个卡片的信息
这种情况要怎么修改呢?
你只是给不同的卡片规格定义了相应配置,获取的卡片信息也不是第一个,而是你在手机离创建出来的那个形态信息。
刚才有看了一下获取的卡片信息 是三条都有
[
{
"bundleName": "com.zmtq.weather",
"moduleName": "entry",
"abilityName": "EntryFormAbility",
"name": "widget",
"displayName": "$string:33554455",
"displayNameId": 33554455,
"description": "$string:33554454",
"descriptionId": 33554454,
"type": 2,
"jsComponentName": "",
"colorMode": -1,
"isDefault": false,
"updateEnabled": true,
"formVisibleNotify": false,
"formConfigAbility": "",
"updateDuration": 1,
"scheduledUpdateTime": "10:30",
"defaultDimension": 2,
"relatedBundleName": "com.zmtq.weather",
"supportDimensions": [2],
"customizeData": {},
"isDynamic": false,
"transparencyEnabled": false,
"fontScaleFollowSystem": true,
"supportedShapes": [1]
},
{
"bundleName": "com.zmtq.weather",
"moduleName": "entry",
"abilityName": "EntryFormAbility",
"name": "widget1",
"displayName": "$string:33554454",
"displayNameId": 0,
"description": "$string:33554454",
"descriptionId": 0,
"type": 2,
"jsComponentName": "",
"colorMode": -1,
"isDefault": false,
"updateEnabled": true,
"formVisibleNotify": false,
"formConfigAbility": "",
"updateDuration": 1,
"scheduledUpdateTime": "10:30",
"defaultDimension": 3,
"relatedBundleName": "com.zmtq.weather",
"supportDimensions": [3],
"customizeData": {},
"isDynamic": false,
"transparencyEnabled": false,
"fontScaleFollowSystem": true,
"supportedShapes": [1]
},
{
"bundleName": "com.zmtq.weather",
"moduleName": "entry",
"abilityName": "EntryFormAbility",
"name": "widget2",
"displayName": "$string:33554455",
"displayNameId": 0,
"description": "$string:33554454",
"descriptionId": 0,
"type": 2,
"jsComponentName": "",
"colorMode": -1,
"isDefault": false,
"updateEnabled": true,
"formVisibleNotify": false,
"formConfigAbility": "",
"updateDuration": 1,
"scheduledUpdateTime": "10:30",
"defaultDimension": 4,
"relatedBundleName": "com.zmtq.weather",
"supportDimensions": [4],
"customizeData": {},
"isDynamic": false,
"transparencyEnabled": false,
"fontScaleFollowSystem": true,
"supportedShapes": [1]
}
]
但是他在我点击桌面图标的时候就获取了三个卡片信息 我还没有选择我添加的是哪个尺寸的卡片 当我点击某个尺寸后 他知道我点的是哪个吗?我要怎么拿到我点击的这个卡片信息呢?
在HarmonyOS鸿蒙Next系统中,添加多个尺寸的卡片并匹配传递的不同背景图及数据时,可以通过以下方式实现:
首先,确保你的卡片组件支持多种尺寸。在卡片的设计阶段,你需要为每种可能的尺寸定义不同的布局文件。这些布局文件应包含适当尺寸的视图容器,以便能够正确显示不同大小的背景图和数据。
其次,在卡片的服务端代码中,根据卡片尺寸的不同,动态加载对应的背景图和数据。你可以通过卡片请求中的尺寸信息来判断当前需要加载哪种资源。例如,如果卡片尺寸较大,则加载高分辨率的背景图;如果尺寸较小,则加载低分辨率的背景图以减少资源消耗。
同时,确保你的数据传递机制能够支持不同尺寸卡片所需的数据格式。你可能需要设计一个灵活的数据结构,以便能够根据需要传递不同数量和类型的数据给卡片。
最后,在卡片显示端,根据加载的背景图和数据,更新卡片界面以展示正确的信息。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。