HarmonyOS鸿蒙Next中怎么主动拉起卡片的半模态弹窗?

HarmonyOS鸿蒙Next中怎么主动拉起卡片的半模态弹窗? 是否能在自己写的应用内,主动拉起当前应用的卡片半模态弹窗?


更多关于HarmonyOS鸿蒙Next中怎么主动拉起卡片的半模态弹窗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

【解决方案】

FormMenu组件封装了一个“添加至桌面”菜单,用于实现应用内长按组件生成“添加至桌面”菜单,点击该菜单,触发卡片添加至桌面操作。若需要从app内部点击按钮(不是长按按钮)添加桌面小组件,可以使用formProvider接口提供的openFormManager方法来实现,具体请参考应用内拉起卡片管理加桌,注意parameters内的参数需与form_config.json中定义的卡片名称、尺寸对应,元服务内可以参考元服务卡片加桌

更多关于HarmonyOS鸿蒙Next中怎么主动拉起卡片的半模态弹窗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以的,在你入口模块右键:新建>Service Widget>Dynamic Widget 就会创建一个卡片页面,长按你的应用就会有卡片选项了

不是这个意思,是直接拉起图二的半模态弹窗。

那应该不太行,

目前貌似应用并不能直接拉起添加卡片的窗口

在HarmonyOS Next中,可通过FormExtensionAbilityupdateForm方法并设置formBindingData来主动更新卡片。要拉起半模态弹窗,需在卡片布局中配置ohos:window_layout_mode="floating",并在事件回调中触发formBindingData的更新,系统将自动以半模态形式展示。

在HarmonyOS Next中,应用内可以主动拉起当前应用的卡片半模态弹窗。这主要通过ArkTS的UIAbility和FormExtensionAbility机制实现。

核心方法是使用formProvider.requestPublishForm接口。具体步骤如下:

  1. 获取目标卡片的formId:在应用内,你需要知道希望拉起的那个具体卡片的标识(formId)。这通常在卡片创建或管理时获取。

  2. 调用拉起接口:在你的UIAbility或页面中,调用formProviderrequestPublishForm方法,并传入必要的参数。

    import formProvider from '@ohos.app.form.formProvider';
    import { BusinessError } from '@ohos.base';
    
    try {
      // formId 是你要拉起的卡片的标识
      let formId: string = '你的卡片formId';
      // 构建一个包含你想要传递到卡片的数据对象
      let formData: Record<string, Object> = {
        // ... 你的数据
      };
      // 调用接口请求发布(拉起)卡片
      await formProvider.requestPublishForm(formId, formData);
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error(`Failed to request publish form. Code: ${err.code}, message: ${err.message}`);
    }
    
  3. 卡片侧响应:对应的FormExtensionAbility需要在其onAddForm或后续生命周期中,能够处理接收到的formData,并按照半模态弹窗的样式进行渲染。卡片的布局和能力需要在form_config.json中进行预定义。

关键点

  • 此操作拉起的卡片是其“半模态弹窗”形态,而非桌面小部件形态。
  • 拉起的卡片与你的主应用共享同一个进程,可以直接通信。
  • 确保在应用的module.json5中正确声明了FormExtensionAbility和必要的权限。

通过以上步骤,即可实现从应用内主动触发特定卡片的半模态弹窗显示。

回到顶部