| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |
智慧手势控制器
介绍
本示例为SmartGestureController的配套示例工程。
本示例展示了智慧手势控制器的使能、监听、选中态控制以及动态决策智慧手势行为的完整能力,覆盖敲一敲和划一划两种交互方式在不同UI场景下的适配方案。
效果预览
| 首页 | Case1: 长页面Scroll + Button |
|---|---|
| Case2: 长列表List | Case3: 单页面 + 多组件 |
| Case4: Swiper + Button |
使用说明
- 手势类型与场景匹配:
触发组件点击:用敲一敲(TAP),通过ClickActionProposal执行点击。
切换选中组件:用划一划(SLIDE_FORWARD),通过SelectActionProposal切换选中焦点。
滚动容器内容:用划一划(SLIDE_FORWARD),通过ScrollActionProposal滚动指定距离。
翻页切换页面:用划一划(SLIDE_FORWARD),通过PageSwitchActionProposal切换Swiper页面。
返回上一页面:用BackPressActionProposal模拟返回键。
拒绝本次手势:用NoneActionProposal不执行任何操作。 - 关键注意事项:
启用手势:调用enableSmartTapAndSlideGestures(true)开启智慧手势,关闭后组件侧smartGestureShortcut配置仍保留但不响应。
注册监听:通过registerMonitor注册回调,按后注册先执行的顺序触发,返回GestureHandlingResolution(true)即消费本次手势,后续回调不再执行。
选中控制:requestSelected请求选中组件(组件需满足可见、可响应智慧手势、绑定onClick三个条件),clearSelected清空当前选中。 - 特殊场景适配:
长页面滚动 + 按钮:Case1演示划一划先滚动到按钮区域,再划一划选中按钮,敲一敲触发点击。
长列表选中:Case2演示划一划选中ListItem,敲一敲触发点击。
单页面多组件:Case3演示在同一页面中对Text、Button、Toggle、Slider分别进行选中与点击操作。 Swiper翻页 + 按钮:Case4演示划一划翻页切换Swiper页面,敲一敲触发页面内按钮点击。
工程目录
entry/src/main/ets/
└── pages
└── Index.ets // 首页导航
└── Case1.ets // 长页面Scroll + Button场景
└── Case2.ets // 长列表List场景
└── Case3.ets // 单页面 + 多组件场景
└── Case4.ets // Swiper + Button场景
具体实现
- 智慧手势使能与监听注册:在aboutToAppear中调用controller.enableSmartTapAndSlideGestures(true)开启手势,调用controller.registerMonitor(callback)注册监听回调;在aboutToDisappear中调用controller.clearMonitors()清空回调并调用enableSmartTapAndSlideGestures(false)关闭手势。
- Monitor回调动态决策:回调接收BaseGestureHandlingProposal参数,通过proposal.action判断手势动作类型(CLICK/SELECT/SCROLL_FORWARD/PAGE_FORWARD/BACK_PRESS/NONE),根据业务需求构造对应的ActionProposal(如ClickActionProposal(node)、ScrollActionProposal(node, distance)),设置到GestureHandlingResolution的selectedProposal属性返回,实现对系统默认动作的自定义覆写。
- 组件标记与节点定位:交互组件通过.smartGestureShortcut({ action: GestureShortcut.PRIMARY, enabled: true, selectable: true })标记为智慧手势目标,通过.id()设置组件标识,在Monitor回调中通过this.getUIContext().getFrameNodeById(id)获取FrameNode用于构造ActionProposal。
- 选中态手动控制:通过controller.requestSelected(id)手动请求选中指定组件,通过controller.clearSelected()清空选中态,适用于需要跨页面选中或精确控制选中焦点的场景。
相关权限
不涉及
依赖
不涉及
约束和限制
1.本示例仅支持标准系统上运行, 支持设备:RK3568。
2.本示例为Stage模型,支持API26版本SDK,版本号:7.0.0.24,镜像版本号:OpenHarmony_7.0.0.24。
3.本示例需要使用DevEco Studio 6.1.1 Release (Build Version: 6.1.1.280, built on May 26, 2026)及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/DocsSample/ArkUISample/SmartGesture > .git/info/sparse-checkout
git remote add origin https://gitcode.com/openharmony/applications_app_samples.git
git pull origin master