HarmonyOS 鸿蒙Next 自定义弹窗部分问题答疑
HarmonyOS 鸿蒙Next 自定义弹窗部分问题答疑
1、使用自定义弹窗时,希望拦截返回键不隐藏
2、自定义弹窗展示怎么遮盖住底部导航条
3 回复
现在想要实现防止用户侧滑关闭自定义弹窗的效果需要基于Navigation实现自定义弹窗,然后设置.onBackPressed((): boolean => true)
试试这段代码:
@Entry
@Component
struct CustomDialogUser {
dialogController: CustomDialogController = new CustomDialogController({
builder: CustomDialogExample({
cancel: () => { this.onCancel() },
confirm: () => { this.onAccept() },
}),
alignment: DialogAlignment.Bottom,
offset: { dx: -2, dy: 5 },
gridCount: 4,
customStyle: false,
backgroundColor: 0xd9ffffff,
cornerRadius: 10,
})
onCancel() {
console.info('Callback when the first button is clicked')
}
onAccept() {
console.info('Callback when the second button is clicked')
}
build() {
Column() {
Button('click me')
.onClick(() => {
this.dialogController.open()
})
}.width('100%').margin({ top: 5 })
}
}
@CustomDialog
struct CustomDialogExample {
cancel?: () => void
confirm?: () => void
controller: CustomDialogController
build() {
Column() {
Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 })
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
this.controller.close()
if (this.cancel) {
this.cancel()
}
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('confirm')
.onClick(() => {
this.controller.close()
if (this.confirm) {
this.confirm()
}
}).backgroundColor(0xffffff).fontColor(Color.Red)
}.margin({ bottom: 10 })
}.backgroundColor(Color.Red)
}
}
这是遮盖导航条方案,是通过修改offset和alignment这俩属性的值实现:
@Entry
@Component
struct CustomDialogUser {
dialogController: CustomDialogController = new CustomDialogController({
builder: CustomDialogExample({
cancel: () => { this.onCancel() },
confirm: () => { this.onAccept() },
}),
alignment: DialogAlignment.Bottom,
offset: { dx: -2, dy: 5 },
gridCount: 4,
customStyle: false,
backgroundColor: 0xd9ffffff,
cornerRadius: 10,
})
onCancel() {
console.info('Callback when the first button is clicked')
}
onAccept() {
console.info('Callback when the second button is clicked')
}
build() {
Column() {
Button('click me')
.onClick(() => {
this.dialogController.open()
})
}.width('100%').margin({ top: 5 })
}
}
@CustomDialog
struct CustomDialogExample {
cancel?: () => void
confirm?: () => void
controller: CustomDialogController
build() {
Column() {
Text('我是内容').fontSize(20).margin({ top: 10, bottom: 10 })
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('cancel')
.onClick(() => {
this.controller.close()
if (this.cancel) {
this.cancel()
}
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('confirm')
.onClick(() => {
this.controller.close()
if (this.confirm) {
this.confirm()
}
}).backgroundColor(0xffffff).fontColor(Color.Red)
}.margin({ bottom: 10 })
}.backgroundColor(Color.Red)
}
}
更多关于HarmonyOS 鸿蒙Next 自定义弹窗部分问题答疑的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
1 NavDestinationMode.DIALOG 可以配合onBackPressed可以拦截。
2 盖不住。适配或者直接干掉导航条。干掉可以在dialog 展示的时候。然后dialog在消失的时候在把导航条弄出来,但感觉问题会比较多。
针对帖子标题“HarmonyOS 鸿蒙Next 自定义弹窗部分问题答疑”,以下是对鸿蒙系统中自定义弹窗相关问题的直接回答:
-
自定义弹窗布局不生效:
- 确保自定义布局文件已正确放置在res/layout目录下,并在代码中正确引用。
- 检查布局文件中使用的组件是否支持在弹窗中使用,部分组件可能在弹窗中有特定的限制。
-
弹窗显示位置异常:
- 自定义弹窗时,可通过设置弹窗的Window属性来调整其显示位置,如使用
setGravity
方法。 - 确保未对弹窗进行不必要的偏移设置,避免位置计算错误。
- 自定义弹窗时,可通过设置弹窗的Window属性来调整其显示位置,如使用
-
弹窗背景透明问题:
- 弹窗背景透明通常与Window的背景设置有关,可尝试设置Window的背景为透明或指定颜色的半透明背景。
- 检查弹窗内部布局的背景设置,确保未覆盖外部Window的背景设置。
-
弹窗动画效果:
- 自定义弹窗动画可通过设置Window的进出动画资源来实现,确保动画资源文件已正确放置在res/anim目录下,并在代码中正确引用。
-
弹窗点击事件不响应:
- 确保弹窗中的组件已正确设置点击事件监听器。
- 检查弹窗的焦点和触摸事件是否被其他组件拦截。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html