HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码
HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码
介绍
本示例介绍以下五种常见的弹窗场景化案例。
- 应用启动时的隐私政策和用户协议弹窗
- 网络请求完成的结果提示弹窗
- 应用返回上一级页面的退出确认弹窗
- 个人信息填写的信息弹窗
- 应用使用过程中出现的付费类广告弹窗
效果预览

使用说明
- 进入应用会立马弹出一个隐私协议窗口,点同意关闭该窗口,点不同意退出应用。
- 点击网络请求完成的结果提示弹窗,会弹出一个等待的子窗口弹窗,网络请求完毕之后,会提示网络请求的结果。
- 点击应用返回上一级页面的退出确认弹窗,手势滑动退出时会弹出一个确认退出的弹窗,只有点击确认了才会返回上一级页面。
- 点击个人信息填写的信息弹窗,点弹窗中的确认,会将弹窗中选择的数据返回给所需呈现的页面。
- 点击应用使用过程中出现的付费类广告弹窗,会有一个自下而上的动画弹出广告弹窗,点击关闭时,同样会有一个自上而下的动画关闭弹窗。
实现思路
应用启动时的隐私政策和用户协议弹窗
基于NavDestination组件的DIALOG模式实现此弹窗,点击《用户协议》或《隐私政策》跳转到对应网址,展现更加详细信息,同时使用用户所选项方式持久化保存到用户的选择,并通过onBackPressed拦截到退出操作,实现用户必须点击同意或者不同意才能使用App。核心代码如下,源码参考PrivacyPolicyDialog.ets
网络请求完成的结果提示弹窗
通过全局子窗口和全局自定义弹窗实现此弹窗。网络请求过程中会先加载一个正在请求样式的全局子窗口弹窗,请求完毕之后,会加载请求结果的一个全局自定义弹窗。核心代码如下,源码参考HttpRequestDialog.ets,GlobalSubWindow.ets,GlobalCustomDialog.ets
全局子窗口
- 获取应用的
WindowStage,使用AppStorage方式保存 - 显示全局子窗口
- 关闭全局子窗口
全局自定义弹窗
核心代码如下,源码参考GlobalCustomDialog.ets
应用返回上一级页面的退出确认弹窗
通过onBackPressed拦截到退出操作,并将弹窗弹出。核心代码如下,源码参考SideGestureInterceptDialog.ets
个人信息填写的信息弹窗
通过@State和@Link关键字,实现将弹窗返回的数据传递给上一级页面。核心代码如下,源码参考PersonInfoDialog.ets
应用使用过程中出现的付费类广告弹窗
基于NavDestination组件的DIALOG模式实现此弹窗,弹窗弹出时呈现自下而上的动画效果,关闭是呈现自上而下的动画效果。核心代码如下,源码参考AdvertDialog.ets
更多关于HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,实现多种弹窗可以通过ArkUI框架提供的组件和方法来完成。以下是几种常见的弹窗实现示例代码:
- AlertDialog弹窗:
import prompt from '@ohos.prompt';
prompt.showDialog({
title: '提示',
message: '这是一个AlertDialog弹窗',
buttons: [
{
text: '确定',
color: '#000000',
action: () => {
console.log('点击了确定');
}
},
{
text: '取消',
color: '#FF0000',
action: () => {
console.log('点击了取消');
}
}
]
});
- Toast弹窗:
import prompt from '@ohos.prompt';
prompt.showToast({
message: '这是一个Toast弹窗',
duration: 2000
});
- ActionSheet弹窗:
import prompt from '@ohos.prompt';
prompt.showActionSheet({
title: '选择操作',
items: ['选项1', '选项2', '选项3'],
success: (index) => {
console.log(`选择了第${index + 1}个选项`);
},
cancel: () => {
console.log('取消了选择');
}
});
- CustomDialog自定义弹窗:
import { CustomDialogController } from '@ohos.arkui.advanced';
@Entry
@Component
struct CustomDialogExample {
private controller: CustomDialogController = new CustomDialogController({
builder: () => {
return Column() {
Text('这是一个自定义弹窗')
.fontSize(18)
.margin({ top: 20 });
Button('关闭')
.onClick(() => {
this.controller.close();
})
.margin({ top: 20 });
}.padding(20);
},
alignment: DialogAlignment.Center
});
build() {
Column() {
Button('显示自定义弹窗')
.onClick(() => {
this.controller.open();
});
}
.width('100%')
.height('100%')
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center);
}
}
这些代码示例展示了如何在HarmonyOS鸿蒙Next中实现不同类型的弹窗。
更多关于HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,可以通过多种方式实现弹窗。以下是几种常见弹窗的实现示例代码:
- AlertDialog 弹窗:
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示")
.setMessage("这是一个AlertDialog弹窗")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击确定后的操作
}
})
.setNegativeButton("取消", null)
.show();
- PopupWindow 弹窗:
View popupView = LayoutInflater.from(context).inflate(R.layout.popup_layout, null);
PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(parentView, Gravity.CENTER, 0, 0);
- Toast 提示:
Toast.makeText(context, "这是一个Toast提示", Toast.LENGTH_SHORT).show();
- Dialog 自定义弹窗:
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom_dialog_layout);
dialog.setTitle("自定义弹窗");
dialog.show();
这些代码示例展示了如何在HarmonyOS中实现不同类型的弹窗,开发者可以根据具体需求选择合适的弹窗类型。

