通过弹窗控制器显示自定义弹窗,可以设置自定义弹窗的样式和内容。
弹窗接口集合定义在结构体里,命名为ArkUI_NativeDialogAPI_x (x表示版本),这些接口围绕弹窗控制器实现各种弹窗控制。
创建和销毁弹窗控制器
-
创建弹窗控制器
ArkUI_NativeDialogHandle表示指向弹窗控制器的指针,可以通过调用ArkUI_NativeDialogAPI_x 的create接口创建一个弹窗控制器,
该方法返回ArkUI_NativeDialogHandle类型的数据。
ArkUI_NativeDialogAPI_1 *dialogAPI = reinterpret_cast<ArkUI_NativeDialogAPI_1 *>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_DIALOG, "ArkUI_NativeDialogAPI_1"));
auto dialogController = dialogAPI->create();
-
销毁弹窗控制器
当不再需要弹窗操作时,需要主动调用dispose接口销毁弹窗控制器对象。
ArkUI_NativeDialogAPI_1 *dialogAPI = reinterpret_cast<ArkUI_NativeDialogAPI_1 *>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_DIALOG, "ArkUI_NativeDialogAPI_1"));
dialogAPI->dispose(dialogController);
设置弹窗样式
可以设置弹窗对齐方式、偏移量,弹窗背板圆角弧度、背景色、蒙层颜色以及区域等。
- 创建弹窗内容节点。
ArkUI_NodeHandle CreateDialogContent() {
ArkUI_NativeNodeAPI_1 *nodeAPI = reinterpret_cast<ArkUI_NativeNodeAPI_1 *>(
OH_ArkUI_QueryModuleInterfaceByName(ARKUI_NATIVE_NODE, "ArkUI_NativeNodeAPI_1"));
ArkUI_NodeHandle text = nodeAPI->createNode(ARKUI_NODE_TEXT);
ArkUI_NumberValue textWidthValue[] = {
{.f32 = 300}};
ArkUI_AttributeItem textWidthItem = {.value = textWidthValue,
.size = sizeof(textWidthValue) / sizeof(ArkUI_NumberValue)};
nodeAPI->setAttribute(text, NODE_WIDTH, &textWidthItem);
ArkUI_NumberValue textHeightValue[] = {
{.f32 = 300}};
ArkUI_AttributeItem textHeightItem = {.value = textHeightValue,
.size = sizeof(textWidthValue) / sizeof(ArkUI_NumberValue)};
nodeAPI->setAttribute(text, NODE_HEIGHT, &textHeightItem);
ArkUI_NodeHandle span = nodeAPI->createNode(ARKUI_NODE_SPAN);
ArkUI_AttributeItem spanItem = {.string = "这是一个弹窗"};
nodeAPI->setAttribute(span, NODE_SPAN_CONTENT, &spanItem);
ArkUI_NodeHandle imageSpan = nodeAPI->createNode(ARKUI_NODE_IMAGE_SPAN);
ArkUI_AttributeItem imageSpanItem = {.string = "/pages/common/sky.jpg"};
nodeAPI->setAttribute(imageSpan, NODE_IMAGE_SPAN_SRC, &imageSpanItem);
ArkUI_NumberValue imageSpanWidthValue[] = {
{.f