HarmonyOS 鸿蒙Next CustomDialogController 弹出多次如何修改每次的offset
HarmonyOS 鸿蒙Next CustomDialogController 弹出多次如何修改每次的offset
尝试下面的代码,无法生效。
@State
dialogOffset?:Offset = undefined
controller: CustomDialogController = new CustomDialogController({
builder: MyDialog(),
alignment: DialogAlignment.CenterStart,
offset:this.dialogOffset
})
// 这个方面会多次调用
openDialog() {
this.dialogOffset = xxx // <==== 这里每次都会更新值不一样
this.controller.open()
}
}
尝试每次都new CustomDialogController 会提示
Error message:is not callable
Stacktrace:
at SynchedPropertyTwoWayPU (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:4515:4515)
at SynchedPropertyObjectTwoWayPU (/usr1/hmos_for_system/src/increment/sourcecode/foundation/arkui/ace_engine/frameworks/bridge/declarative_frontend/engine/stateMgmt.js:0:1)
at MyDialog
at builder
更多关于HarmonyOS 鸿蒙Next CustomDialogController 弹出多次如何修改每次的offset的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
目前自定义弹窗的所有参数,暂不支持动态刷新。
可以先参考以下demo:
import { BusinessError } from '@ohos.base';
import { ComponentContent } from "@ohos.arkui.node";
class Params {
text: string = ""
constructor(text: string) {
this.text = text;
}
}
@Builder
function buildText(params: Params) {
Column() {
Text(params.text)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.margin({bottom: 36})
}.backgroundColor('#FFF0F0F0')
}
@Entry
@Component
struct Index {
@State message: string = "hello"
build() {
Row() {
Column() {
Button("click me")
.onClick(() => {
let uiContext = this.getUIContext();
let promptAction = uiContext.getPromptAction();
let contentNode = new ComponentContent(uiContext, wrapBuilder(buildText), new Params(this.message));
try {
promptAction.openCustomDialog(contentNode);
} catch (error) {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
console.error(OpenCustomDialog args error code is ${code}, message is ${message});
};
setTimeout(() => {
try {
promptAction.updateCustomDialog(contentNode, { alignment: DialogAlignment.CenterEnd });
} catch (error) {
let message = (error as BusinessError).message;
let code = (error as BusinessError).code;
console.error(updateCustomDialog args error code is ${code}, message is ${message});
};
},2000); //2秒后自动更新弹窗位置
})
}
.width('100%')
.height('100%')
}
.height('100%')
}
}
demo中的updateCustomDialog可以更新已弹出的dialogContent对应的自定义弹窗的样式,demo中具体效果是点击按钮弹出弹窗,2秒后自动更新弹窗位置,要用最新版本运行。
更多关于HarmonyOS 鸿蒙Next CustomDialogController 弹出多次如何修改每次的offset的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS中,如果你在使用Next CustomDialogController
时遇到弹出多次且需要修改每次弹出的offset问题,可以通过以下方式实现:
-
维护弹出次数与偏移量: 在代码中维护一个变量来记录弹出的次数,每次弹出时根据该变量动态计算或设置
offset
。 -
在Dialog显示前设置Offset: 在调用
showDialog
或相关显示方法之前,根据当前的弹出次数更新Dialog的偏移量属性(如setGravity
配合setXYOffset
,或根据Dialog的布局参数直接设置)。 -
确保每次创建新Dialog实例: 如果每次弹出的是同一个Dialog实例,修改其偏移量可能不会生效。确保每次弹出时都创建一个新的
CustomDialogController
实例,并在创建时设置相应的偏移量。 -
示例代码(伪代码,具体实现需根据实际项目调整):
int dialogCount = 0; dialogCount++; CustomDialogController dialog = new CustomDialogController(context); // 根据dialogCount设置偏移量 dialog.setXYOffset((int)(dialogCount * 50), 0); // 示例:每次垂直偏移增加50 dialog.showDialog();
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html