HarmonyOS 鸿蒙Next:添加多个尺寸的卡片时,如何匹配传递的不同背景图及数据

HarmonyOS 鸿蒙Next:添加多个尺寸的卡片时,如何匹配传递的不同背景图及数据 在添加不同尺寸的卡片时 传递的数据以及卡片背景图尺寸大小均不同 我在更新数据的时候 如何对不同尺寸的卡片进行各自的数据更新?

9 回复

求助各位走过路过的大佬

更多关于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
    数据代理启用: 是
    支持尺寸: 2
    2

  • 名称: widget1
    显示名称: $string:widget1_display_name
    描述: $string:widget1_desc
    源码路径: ./ets/widget1/pages/Widget1Card.ets
    UI语法: arkts
    窗口设计宽度: 720
    自动设计宽度: 是
    颜色模式: auto
    动态: 否
    默认: 否
    更新启用: 是
    计划更新时间: 10:30
    更新时长: 1
    默认尺寸: 24
    数据代理启用: 是
    支持尺寸: 2
    4

  • 名称: widget2
    显示名称: $string:widget2_display_name
    描述: $string:widget2_desc
    源码路径: ./ets/widget2/pages/Widget2Card.ets
    UI语法: arkts
    窗口设计宽度: 720
    自动设计宽度: 是
    颜色模式: auto
    动态: 否
    默认: 否
    更新启用: 是
    计划更新时间: 10:30
    更新时长: 1
    默认尺寸: 44
    数据代理启用: 是
    支持尺寸: 4
    4

使用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

回到顶部