HarmonyOS 鸿蒙Next CustomDialogController.open打开的弹窗被异常关闭;HarmonyOS 鸿蒙Next checkbox 点击时的背景效果怎么移除

HarmonyOS 鸿蒙Next CustomDialogController.open打开的弹窗被异常关闭;HarmonyOS 鸿蒙Next checkbox 点击时的背景效果怎么移除

1.CustomDialogController.open打开的弹窗被异常关闭
登录页隐私弹窗,点击跳转协议详情,再返回登录页,弹窗被关闭了,怎么让弹窗保持?

2,checkbox 点击时的背景效果怎么移除
点击CheckBox时,背景会有一个范围的背景色效果,如何移除?


更多关于HarmonyOS 鸿蒙Next CustomDialogController.open打开的弹窗被异常关闭;HarmonyOS 鸿蒙Next checkbox 点击时的背景效果怎么移除的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以使用Stack组件模拟实现Dialog的效果,页面跳转之后返回 可以做到 Dialog依然显示的效果。demo如下所示:

import router from '@ohos.router';

@Entry
@Component
struct First {
    @State textValue: string = 'Hello World';
    // 显隐控制设置为不占用
    @State visible: Visibility = Visibility.None;

    build() {
        // 使用stack可以实现假的dialog覆盖原页面上面
        Stack() {
            Row() {
                // 初始页面
                Column() {
                    Text('Hello World')
                        .fontSize(50)
                        .fontWeight(FontWeight.Bold);

                    // 触发dialog的地方
                    Button('click')
                        .onClick(() => {
                            // 用于检测点击事件是否透传到原来的页面,我测了一下是没有透传的,符合dialog规范
                            console.log("hit me!");
                            if (this.visible == Visibility.Visible) {
                                this.visible = Visibility.None;
                            } else {
                                this.visible = Visibility.Visible;
                            }
                        })
                        .backgroundColor(0x777474)
                        .fontColor(0x000000);
                }
                .width('100%');
            }
            .height('100%')
            .backgroundColor(0x885555);

            // 这里开始是构造弹窗效果主要需要修改的地方,首先是加了一个半透明灰色的蒙层效果
            Text('')
                .onClick(() => {
                    if (this.visible == Visibility.Visible) {
                        this.visible = Visibility.None;
                    } else {
                        this.visible = Visibility.Visible;
                    }
                })
                .width('100%')
                .height('100%')
                // 透明度可以自己调节一下
                .opacity(0.16)
                .backgroundColor(0x000000)
                .visibility(this.visible);

            Column() {
                // 这个可以调节对话框效果,栅格布局,xs,sm,md,lg分别为四种规格
                // 下面的breakpoints是用来区别当前属于哪个类型的断点
                // gridRow里的栅格数量为总数,gridCol里的就是偏移和假Dialog所占据的栅格数
                GridRow({
                    columns: { xs: 1, sm: 4, md: 8, lg: 12 },
                    breakpoints: {
                        value: ["400vp", "600vp", "800vp"],
                        reference: BreakpointsReference.WindowSize
                    },
                }) {
                    GridCol({
                        span: { xs: 1, sm: 2, md: 4, lg: 8 },
                        offset: { xs: 0, sm: 1, md: 2, lg: 2 }
                    }) {
                        // 这里放的就是原Dialog里的column里的东西,稍微改改应该就可以用了
                        Column() {
                            Text('Change text').fontSize(20).margin({ top: 10, bottom: 10 });
                            TextInput({ placeholder: '', text: this.textValue })
                                .height(60)
                                .width('90%')
                                .onChange((value: string) => {
                                    this.textValue = value;
                                });
                            Text('Whether to change a text?').fontSize(16).margin({ bottom: 10 });
                            Flex({ justifyContent: FlexAlign.SpaceAround }) {
                                Button('cancel')
                                    .onClick(() => {
                                        if (this.visible == Visibility.Visible) {
                                            this.visible = Visibility.None;
                                        } else {
                                            this.visible = Visibility.Visible;
                                        }
                                    })
                                    .backgroundColor(0xffffff)
                                    .fontColor(Color.Black);

                                Button('jump')
                                    .onClick(() => {
                                        router.pushUrl({
                                            url: 'pages/Second'
                                        });
                                    })
                                    .backgroundColor(0xffffff)
                                    .fontColor(Color.Red);
                            }.margin({ bottom: 10 });
                        }
                        .backgroundColor(0xffffff)
                        .visibility(this.visible)
                        .clip(true)
                        .borderRadius(20);
                    }
                }.width('95%'); // 设置弹窗宽度
            }
        }
    }
}

更多关于HarmonyOS 鸿蒙Next CustomDialogController.open打开的弹窗被异常关闭;HarmonyOS 鸿蒙Next checkbox 点击时的背景效果怎么移除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS 鸿蒙Next CustomDialogController.open打开的弹窗被异常关闭的问题

此问题可能与弹窗的生命周期管理或外部事件干扰有关。请检查以下几点:

  • 确保弹窗打开时,相关页面或上下文未被销毁。
  • 查看是否有其他代码或事件(如后台任务、定时器等)在弹窗打开后触发了关闭操作。
  • 验证CustomDialogController的open方法调用是否在UI线程执行。

针对HarmonyOS 鸿蒙Next checkbox 点击时的背景效果移除的问题

要移除checkbox点击时的背景效果,可以尝试以下方法:

  • 自定义checkbox的样式,通过XML布局或样式文件设置其背景为透明或空。
  • 在checkbox的点击事件中,动态设置其背景为透明或空。
  • 检查是否有全局主题或样式影响了checkbox的背景效果,并做相应调整。

请注意,上述方法可能需要根据具体的鸿蒙开发环境和版本做适当调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部