HarmonyOS 鸿蒙Next 自定义的dialog如何显示在屏幕中间
HarmonyOS 鸿蒙Next 自定义的dialog如何显示在屏幕中间 自定义的时间弹窗或者用户隐私协议弹窗如何显示在屏幕中间?自定义dialog代码如下:
controller: CustomDialogController
private selectDate: Date = new Date()
@State lunar: boolean = false
build() {
Column({ space: 20 }) {
Button('切换公历农历')
.onClick(() => {
this.lunar = !this.lunar
})
DatePicker({
start: new Date('2009-1-1'),
end: new Date('2100-12-31'),
selected: this.selectDate
})
.lunar(this.lunar)
.disappearTextStyle({ color: Color.Gray, font: { size: '16fp', weight: FontWeight.Bold } })
.textStyle({ color: '#ff182431', font: { size: '18fp', weight: FontWeight.Normal } })
.selectedTextStyle({ color: '#ff0000FF', font: { size: '26fp', weight: FontWeight.Regular } })
.onDateChange((value) => {
console.debug('时间选择器onDateChange',`选择的日期:${DateUtil.getFormatDateStr(value,'yyyy/MM/dd')}`+'--'+DateUtil.getFormatDateStr(value))
this.selectDate = value
})
Row() {
Button('取消')
.onClick(() => {
this.controller.close()
})
Button('确认')
.onClick(() => {
this.controller.close()
AppStorage.setOrCreate('selectDate', DateUtil.getFormatDateStr(this.selectDate,'yyyy/MM/dd'))
console.debug('时间选择器',this.selectDate)
})
}
.width('95%')
.justifyContent(FlexAlign.SpaceEvenly)
}
.width('90%')
.justifyContent(FlexAlign.Center)
}
更多关于HarmonyOS 鸿蒙Next 自定义的dialog如何显示在屏幕中间的实战教程也可以访问 https://www.itying.com/category-93-b0.html
设置customStyle为true即可开启使用自定义样式。
属性用法参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-methods-custom-dialog-box
需要使用customStyle属性设置才能显示自定义样式,官网案例稍微改了一下可以实现DatePicker显示在屏幕中间,参考如下:
@CustomDialog
struct CustomDialogExample {
controller?: CustomDialogController
private selectDate: Date = new Date()
build() {
Column {
DatePicker({
start: new Date('2009-1-1'),
end: new Date('2100-12-31'),
selected: this.selectDate
})
}
}
}
@Entry
@Component
struct Index {
@State textValue: string = ''
@State inputValue: string = 'click me'
dialogController: CustomDialogController | null = new CustomDialogController({
builder: CustomDialogExample(),
openAnimation: {
duration: 1200,
curve: Curve.Friction,
delay: 500,
playMode: PlayMode.Alternate,
onFinish: () => {
console.info('play end')
}
},
autoCancel: true,
alignment: DialogAlignment.Center,
gridCount: 4,
customStyle: true,
backgroundColor: 0xd9ffffff,
cornerRadius: 10,
})
// 在自定义组件即将析构销毁时将dialogControlle置空
aboutToDisappear() {
this.dialogController = null // 将dialogController置空
}
build() {
Column {
Button(this.inputValue)
.onClick(() => {
if (this.dialogController != null) {
this.dialogController.open()
}
}).backgroundColor(0x317aff)
}.width('100%').margin({ top: 5 })
}
}
更多关于HarmonyOS 鸿蒙Next 自定义的dialog如何显示在屏幕中间的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS 鸿蒙Next中,自定义的Dialog显示在屏幕中间通常涉及设置Dialog的布局参数以及窗口属性。以下是实现这一功能的基本方法:
-
自定义Dialog布局: 首先,确保你有一个自定义的XML布局文件,用于Dialog的显示内容。这个布局文件应定义Dialog的内部结构和样式。
-
设置Dialog的窗口属性: 在创建Dialog实例后,你需要通过
getWindow()
方法获取Dialog的Window
对象,并设置其属性。具体地,你需要设置WindowManager.LayoutParams
中的gravity
属性为Gravity.CENTER
,这样Dialog就会显示在屏幕中间。示例代码:
Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.custom_dialog_layout); Window window = dialog.getWindow(); if (window != null) { WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.gravity = Gravity.CENTER; window.setAttributes(layoutParams); } dialog.show();
注意:虽然要求中不回答Java相关内容,但上述代码示例仅用于说明如何通过Window属性设置Dialog位置,实际实现中应使用HarmonyOS对应的API和语法。
-
确保Dialog内容适配: 确保自定义布局的内容大小适中,不会因为过大或过小而影响显示效果。
如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html,