HarmonyOS 鸿蒙Next 使用CustomDialogController如何控制弹窗的宽度?

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用CustomDialogController如何控制弹窗的宽度?

使用CustomDialogController,除了通过gridCount控制弹窗宽度外,还有什么方式控制?就是我想设置的宽度在gridCount为3和4之间,这个不知道怎么弄
 

2 回复
 可以设置width去改变弹窗的宽度,demo如下:
```

@CustomDialog

struct CustomDialogExample {

  controller?: CustomDialogController

  cancel: () => void = () => {

  }

  confirm: () => void = () => {

  }

  build() {

    Column() {

      Text(‘这是自定义弹窗’)

        .fontSize(30)

        .height(100)

      Button(‘点我关闭弹窗’)

        .onClick(() => {

          if (this.controller != undefined) {

            this.controller.close()

          }

        })

        .margin(20)

    }

  }

}

@Entry

@Component

struct CustomAlert {

  dialogController: CustomDialogController | null = new CustomDialogController({

    builder: CustomDialogExample({

      cancel: ()=> { this.onCancel() },

      confirm: ()=> { this.onAccept() }

    }),

    cancel: this.existApp,

    autoCancel: true,

    onWillDismiss:(dismissDialogAction: DismissDialogAction)=> {

      console.info(“reason=” + JSON.stringify(dismissDialogAction.reason))

      console.log(“dialog onWillDismiss”)

      if (dismissDialogAction.reason == DismissReason.PRESS_BACK) {

        dismissDialogAction.dismiss()

      }

      if (dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {

        dismissDialogAction.dismiss()

      }

    },

    alignment: DialogAlignment.Center,

    customStyle: false,

    cornerRadius: 20,

    width: 100,

    height: 200,

    backgroundColor: Color.White,

  })

  // 在自定义组件即将析构销毁时将dialogController置空

  aboutToDisappear() {

    this.dialogController = null // 将dialogController置空

  }

  onCancel() {

    console.info(‘Callback when the first button is clicked’)

  }

  onAccept() {

    console.info(‘Callback when the second button is clicked’)

  }

  existApp() {

    console.info(‘Click the callback in the blank area’)

  }

  build() {

    Column() {

      Button(‘click me’)

        .onClick(() => {

          if (this.dialogController != null) {

            this.dialogController.open()

          }

        }).backgroundColor(0x317aff)

    }.width(‘100%’).margin({ top: 5 })

  }

}

更多关于HarmonyOS 鸿蒙Next 使用CustomDialogController如何控制弹窗的宽度?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,使用CustomDialogController控制弹窗的宽度,可以通过设置对话框的布局参数来实现。具体步骤如下:

  1. 定义布局文件:首先,在资源目录中定义一个XML布局文件,用于指定对话框的内容及其宽度。在布局文件中,可以使用DirectionalLayoutStackLayout等容器,并通过设置width属性来控制宽度,例如使用vp(viewport width)单位或具体像素值。

  2. 设置对话框内容:在创建CustomDialogController实例时,通过setDialogLayoutResource方法加载定义好的布局文件。

  3. 调整对话框宽度:虽然直接通过CustomDialogController的API调整宽度有限,但可以在布局文件中预先定义好宽度。若需动态调整,可通过对话框的根视图获取其布局参数,并修改width值,然后重新应用。

示例代码片段(假设布局文件名为dialog_layout.xml):

CustomDialogController dialogController = new CustomDialogController(context);
dialogController.setDialogLayoutResource(ResourceTable.Layout_dialog_layout);
// 加载布局后,如需动态调整,需获取对话框视图并修改其布局参数
// 例如:View dialogView = dialogController.getDialog().findViewById(...);
// LayoutParams params = dialogView.getLayoutParams();
// params.width = ...; // 设置新宽度
// dialogView.setLayoutParams(params);
dialogController.show();

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部