HarmonyOS 鸿蒙Next中半模态页面内进行跳转,如何让目标页面也以半模态形式显示
HarmonyOS 鸿蒙Next中半模态页面内进行跳转,如何让目标页面也以半模态形式显示
学到了
更多关于HarmonyOS 鸿蒙Next中半模态页面内进行跳转,如何让目标页面也以半模态形式显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
拉起半模态页面使用Navigation+新的NavPathStack
,后续跳转页面使用NavDestination,相当于是一个新的页面栈,此页面栈的跳转都会在半模态内进行
可以看一下这个例子:
模态转场是新的界面覆盖在旧的界面上,旧的界面上不消失的一种转场方式。本节将介绍使用bindSheet绑定半模态页面实现模态转场。
步骤1:
打开entry/src/main/ets/pages/ModalTransition.ets文件,创建Builder实现半模态页面,命名为mySheet,并添加Image元素。
步骤2:
给根容器Column设置bindSheet属性,使用状态变量isShowSheet控制半模态页面的显隐,并绑定使用Builder构建的半模态页面。给Image组件添加点击事件,点击时修改isShowSheet的值为true。
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
这有个参考,正常思路是这样,我以为有特定的组件或者api可以实现上述的效果。在半模态builder的布局里进行if操作。
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-modal-transition#使用if实现模态转场
在HarmonyOS Next中,要让目标页面以半模态形式显示,可以在startAbility
时设置窗口模式。使用WindowMode.WINDOW_MODE_FLOATING
参数启动目标Ability。示例代码:
let want = {
deviceId: "",
bundleName: "com.example.target",
abilityName: "TargetAbility",
windowMode: WindowMode.WINDOW_MODE_FLOATING
};
context.startAbility(want).then(() => {
console.log('startAbility success');
}).catch((err) => {
console.error('startAbility failed: ' + JSON.stringify(err));
});
目标Ability需在module.json5
中配置supportWindowMode: ["floating"]
。
在HarmonyOS Next中,要实现半模态页面跳转后目标页面也保持半模态显示,可以通过以下方式实现:
- 使用
present
方法进行页面跳转:
router.pushUrl({
url: 'pages/TargetPage',
presentationStyle: PresentationStyle.FORM_SHEET // 保持半模态样式
})
- 确保目标页面配置了半模态样式:
在目标页面的
aboutToAppear
或onPageShow
生命周期中设置:
windowClass: 'formSheetWindow',
windowStyle: {
height: '50%',
position: 'bottom'
}
- 如果使用自定义弹窗样式,可以在
build
函数中设置:
@CustomDialog
struct TargetPage {
build() {
Column() {
// 页面内容
}
.height('50%')
.width('100%')
}
}
注意:确保跳转前后页面样式一致,避免高度突变影响用户体验。