HarmonyOS 鸿蒙Next中图标长按快捷方式设置问题

HarmonyOS 鸿蒙Next中图标长按快捷方式设置问题 刚看到api20后添加了图标长按快捷方式设置接口,https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-shortcutmanager,无法动态删减,只能设置静态配置的显示与否。。。我们的业务需求是用户能自定义设置快捷菜单,然后打开应用内不同功能模块,这个api根本满足不了需求。能不能参考下其它系统成熟的方案,像iOS那样代码中直接设置快捷菜单数组不行吗?

4 回复

鸿蒙通过shortcuts_config.json预定义快捷方式(最多4个),使用shortcutManager.setShortcutVisibleForSelf仅能控制显示/隐藏,无法动态增删或修改菜单项。

// 仅能设置预配置ID的可见性

shortcutManager.setShortcutVisibleForSelf("shortcut_id", false)

快捷方式必须关联到UIAbility入口(无法直接跳转页面),需在目标Ability中通过want.parameters解析参数实现功能分流:

// EntryAbility.ets

onWant(want: Want) {
  if (want.parameters?.action === 'custom_action') {
    // 处理自定义逻辑
  }
}

替代方案

方案1:通过服务卡片传递动态参数实现功能跳转,虽然卡片本身不可动态创建,但可通过参数控制跳转逻辑:

// 卡片布局中设置点击事件

@Entry
@Component
struct WidgetCard {
  build() {
    Column() {
      Button('功能A')
        .onClick(() => postCardAction({
          action: 'router',
          abilityName: 'EntryAbility',
          params: { action: 'featureA' }
        }))
    }
  }
}

方案2:使用ArkUI的长按手势+自定义弹窗模拟快捷菜单,结合路由跳转实现动态功能:

@Entry
@Component
struct CustomMenuExample {
  @State isMenuVisible: boolean = false
  build() {
    Column() {
      Image($r('app.media.app_icon'))
        .onLongPress(() => {
          this.isMenuVisible = true
        })
    }
    .popup(this.isMenuVisible, {
      builder: () => {
        Column() {
          Button('功能A').onClick(() => {
            router.pushUrl({ url: 'pages/FeatureA' })
            this.isMenuVisible = false
          })
          Button('功能B').onClick(() => {
            router.pushUrl({ url: 'pages/FeatureB' })
            this.isMenuVisible = false
          })
        }
      }
    })
  }
}

更多关于HarmonyOS 鸿蒙Next中图标长按快捷方式设置问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


增加的api是鸡肋,根本满足不了业务需求,还请继续优化。

鸿蒙Next中图标长按快捷方式通过FA卡片(Form Ability)实现。开发时需在config.json中配置formsEnabled属性为true,并定义卡片规格。用户长按应用图标时,系统会显示预设的快捷操作选项。卡片支持静态和动态两种数据更新方式,可通过FormProvider进行数据刷新。具体配置需在元数据中声明supportedModes和defaultForm等参数。

HarmonyOS Next的ShortcutManager API目前确实只支持静态配置的显示控制,无法动态增删快捷方式。这是基于系统安全性和稳定性考虑的设计选择。

对于需要用户自定义快捷菜单的场景,建议通过应用内实现替代方案:

  1. 在应用内提供自定义配置界面
  2. 将用户配置的快捷项存储在应用本地
  3. 通过统一的入口接收点击事件,再根据配置跳转到对应功能模块

虽然这种方式与iOS的动态Shortcuts有所不同,但可以满足业务需求。后续版本可能会增强快捷方式API的能力,建议关注官方更新日志。

回到顶部