HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码

HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码

介绍

本示例介绍以下五种常见的弹窗场景化案例。

  • 应用启动时的隐私政策和用户协议弹窗
  • 网络请求完成的结果提示弹窗
  • 应用返回上一级页面的退出确认弹窗
  • 个人信息填写的信息弹窗
  • 应用使用过程中出现的付费类广告弹窗

弹窗场景化源码链接

效果预览

弹窗效果预览

使用说明

  1. 进入应用会立马弹出一个隐私协议窗口,点同意关闭该窗口,点不同意退出应用。
  2. 点击网络请求完成的结果提示弹窗,会弹出一个等待的子窗口弹窗,网络请求完毕之后,会提示网络请求的结果。
  3. 点击应用返回上一级页面的退出确认弹窗,手势滑动退出时会弹出一个确认退出的弹窗,只有点击确认了才会返回上一级页面。
  4. 点击个人信息填写的信息弹窗,点弹窗中的确认,会将弹窗中选择的数据返回给所需呈现的页面。
  5. 点击应用使用过程中出现的付费类广告弹窗,会有一个自下而上的动画弹出广告弹窗,点击关闭时,同样会有一个自上而下的动画关闭弹窗。

实现思路

应用启动时的隐私政策和用户协议弹窗

基于NavDestination组件的DIALOG模式实现此弹窗,点击《用户协议》或《隐私政策》跳转到对应网址,展现更加详细信息,同时使用用户所选项方式持久化保存到用户的选择,并通过onBackPressed拦截到退出操作,实现用户必须点击同意或者不同意才能使用App。核心代码如下,源码参考PrivacyPolicyDialog.ets

网络请求完成的结果提示弹窗

通过全局子窗口和全局自定义弹窗实现此弹窗。网络请求过程中会先加载一个正在请求样式的全局子窗口弹窗,请求完毕之后,会加载请求结果的一个全局自定义弹窗。核心代码如下,源码参考HttpRequestDialog.ets,GlobalSubWindow.ets,GlobalCustomDialog.ets

全局子窗口

  1. 获取应用的WindowStage,使用AppStorage方式保存
  2. 显示全局子窗口
  3. 关闭全局子窗口

全局自定义弹窗

核心代码如下,源码参考GlobalCustomDialog.ets

应用返回上一级页面的退出确认弹窗

通过onBackPressed拦截到退出操作,并将弹窗弹出。核心代码如下,源码参考SideGestureInterceptDialog.ets

个人信息填写的信息弹窗

通过@State@Link关键字,实现将弹窗返回的数据传递给上一级页面。核心代码如下,源码参考PersonInfoDialog.ets

应用使用过程中出现的付费类广告弹窗

基于NavDestination组件的DIALOG模式实现此弹窗,弹窗弹出时呈现自下而上的动画效果,关闭是呈现自上而下的动画效果。核心代码如下,源码参考AdvertDialog.ets


更多关于HarmonyOS鸿蒙Next中多种弹窗实现方法示例代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,实现多种弹窗可以通过ArkUI框架提供的组件和方法来完成。以下是几种常见的弹窗实现示例代码:

  1. AlertDialog弹窗
import prompt from '@ohos.prompt';

prompt.showDialog({
  title: '提示',
  message: '这是一个AlertDialog弹窗',
  buttons: [
    {
      text: '确定',
      color: '#000000',
      action: () => {
        console.log('点击了确定');
      }
    },
    {
      text: '取消',
      color: '#FF0000',
      action: () => {
        console.log('点击了取消');
      }
    }
  ]
});
  1. Toast弹窗
import prompt from '@ohos.prompt';

prompt.showToast({
  message: '这是一个Toast弹窗',
  duration: 2000
});
  1. ActionSheet弹窗
import prompt from '@ohos.prompt';

prompt.showActionSheet({
  title: '选择操作',
  items: ['选项1', '选项2', '选项3'],
  success: (index) => {
    console.log(`选择了第${index + 1}个选项`);
  },
  cancel: () => {
    console.log('取消了选择');
  }
});
  1. 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中,可以通过多种方式实现弹窗。以下是几种常见弹窗的实现示例代码:

  1. 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();
  1. 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);
  1. Toast 提示:
Toast.makeText(context, "这是一个Toast提示", Toast.LENGTH_SHORT).show();
  1. Dialog 自定义弹窗:
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom_dialog_layout);
dialog.setTitle("自定义弹窗");
dialog.show();

这些代码示例展示了如何在HarmonyOS中实现不同类型的弹窗,开发者可以根据具体需求选择合适的弹窗类型。

回到顶部