首页 > 其他分享 >HarmonyOS开发指南:ArkUI自定义Toast弹窗样式规范

HarmonyOS开发指南:ArkUI自定义Toast弹窗样式规范

时间:2024-08-30 16:21:13浏览次数:6  
标签:Toast 自定义 width CustomDialogController HarmonyOS controller 设置 弹窗

 可以通过使用自定义弹窗和定时器达到类似Toast的效果。

场景一:自定义弹窗实现弹窗中加入icon和文字,支持Button。

方案:

⦁    使用@CustomDialog装饰器装饰自定义弹窗,在此装饰器内进行自定义内容(也就是弹框内容)、并创建构造器,与装饰器呼应相连。

⦁    使用定时器,在页面的生命周期onPageShow中设置定时任务,页面显示时打开弹窗。

核心代码

@CustomDialog 
struct CustomDialogExample { 
  controller?: CustomDialogController 
 
  build() { 
    Row() { 
      Image($r('app.media.huawei')) 
        .height(60) 
        .width(60) 
        .margin(20) 
        .borderRadius(10) 
      Text('Toast弹窗') 
      Button('进入') 
        .onClick(() => { 
          if (this.controller != undefined) { 
            this.controller.close() 
          } 
        }) 
        .margin(20) 
    } 
    .width('100%') 
    .backgroundColor(Color.Grey) 
  } 
} 
 
@Entry 
@Component 
struct CustomDialogUser { 
  dialogController: CustomDialogController | null = new CustomDialogController({ 
    builder: CustomDialogExample(), 
    autoCancel: true, 
    alignment: DialogAlignment.CenterStart, 
    offset: { dx: 10, dy: 10 }, 
    gridCount: 4, 
    showInSubWindow: false, 
    isModal: true, 
    customStyle: false, 
    cornerRadius: 10, 
  }) 
 
  // 使用定时器,在页面的生命周期 onPageShow中设置定时任务,页面显示时打开弹窗 
  onPageShow() { 
    setTimeout(() => { 
      if (this.dialogController != null) { 
        this.dialogController.open() 
      } 
    }, 2000); 
  } 
 
  build() { 
    Column() { 
      // ... 
    } 
  } 
}

场景二:自定义弹窗样式。

⦁    可自定义弹窗位置,5.0规格,未设置alignment弹窗默认居中显示。

⦁    可设置弹窗宽度、高度。gridCount弹窗宽度占栅格宽度的个数最大为4栅格宽度(400vp),API 12可通过width和height属性指定宽高。

弹窗高度最大值:0.9 *(窗口高度 - 安全区域)

⦁    可设置是否有蒙层,有蒙层时可自定义蒙层颜色。

⦁    可设置弹框边框样式、边框宽度、边框颜色。

⦁    可设置弹窗背板阴影、模糊材质。

方案:

⦁    使用@CustomDialog装饰器装饰自定义弹窗,在此装饰器内进行自定义内容。

⦁    创建构造器时CustomDialogController时,customStyle为true,弹窗的样式则为装饰器内自定义的弹窗内容的样式。弹窗位置,是否为模态窗口、蒙层颜色则需要在构造器内使用。

核心代码

@CustomDialog 
struct CustomDialogExample02 { 
  controller?: CustomDialogController 
 
  build() { 
    Row() { 
      Text('为您更新一组内容') 
        .fontColor(Color.White) 
        .margin({ left: 5 }) 
    } 
    .borderRadius(25) 
    .width('40%') 
    .height(40) 
    .backgroundColor('#33FF66') 
  } 
} 
 
@Entry 
@Component 
export struct TestSubtab { 
  @State currentIndex: number = 0 
  @State changeValue: string = '' 
  controller: SearchController = new SearchController() 
  dialogController: CustomDialogController | null = new CustomDialogController({ 
    builder: CustomDialogExample02(), 
    autoCancel: true, // 是否允许点击遮障层退出,true表示关闭弹窗。 
    alignment: DialogAlignment.TopStart, // 弹窗在竖直方向上的对齐方式。 
    offset: { dx: 100, dy: 10 }, // 弹窗相对alignment所在位置的偏移量。 
    showInSubWindow: false, // 弹窗显示在应用内,而非独立子窗口。 
    isModal: true, // 设置弹窗是否为模态窗口,也就是是否有蒙层 
    customStyle: true, // 弹窗容器样式是否自定义。 
    maskColor: Color.Transparent // 自定义蒙层颜色。这里设置蒙层为全透明 
  }) 
 
  onPageShow() { 
    setTimeout(() => { 
      if (this.dialogController != null) { 
        this.dialogController.open() 
      } 
    }, 2000); 
  } 
 
  build() { 
    Column() { 
      // .... 
    } 
  } 
}

场景三:自定义弹窗实现弹窗打开时有从底部向上弹出的效果,以及关闭时从下消失的效果。

方案:

当前自定义弹窗的openAnimation和closeAnimation只能实现弹窗原地打开的相关动画设置,无法设置弹窗位置上变化的效果。为了避免弹窗原地打开关闭,这里选择通过给弹窗设置组件转场动画(transition)来实现。当然也可以根据具体想要实现的效果选择其他动画来自定义弹窗动画。

⦁    设置动画事件为500ms组件转场时插入的起点和删除的终点为屏幕以下300vp。

⦁    在删除的时候需要注意,如果弹窗直接关闭是没有转场效果的,可以先用显隐控制,删除时,设置弹窗为隐藏,此时弹出向下退出的动效生效,再设置延时关闭弹窗。

核心代码

@CustomDialog 
struct CustomDialogExample01 { 
  controller: CustomDialogController 
  @State showFlag: Visibility = Visibility.Visible; 
 
  build() { 
    Column() { 
      Row() { 
        Image($r('app.media.huawei')) 
          .height(60) 
          .width(60) 
          .margin(20) 
          .borderRadius(10) 
        Text('Toast弹窗') 
        Button('进入') 
          .onClick(() => { 
            this.cancel(); 
          }) 
          .margin(20) 
      } 
      .width('100%') 
      .backgroundColor(Color.Grey) 
    } 
    .width("100%") 
    .height(100) 
    .backgroundColor(Color.Pink) 
    .visibility(this.showFlag) 
    // 核心代码 设置动画事件为500ms ,设置组件转场时插入的起点和删除的终点为屏幕以下300vp 
    // 弹窗显示和消失配置为相同的过渡效果(出现和消失互为逆过程) 
    // 出现时从指定的透明度为0、沿y轴平移300vp,变为默认的透明度为1,透明度与旋转动画时长都为500ms 
    // 消失时从默认的透明度为1、沿y轴平移300vp,变为指定的透明度为0,透明度与旋转动画时长都为500ms 
    .transition(TransitionEffect.OPACITY.animation({ duration: 500 }) 
      .combine(TransitionEffect.translate({ y: 300 }))) 
  } 
 
  // 在删除的时候需要注意,如果弹窗直接关闭是没有转场效果的,可以先用显隐控制, 
  // 设置弹窗为隐藏,此时弹出向下退出的动效生效,再设置延时关闭弹窗。 
  cancel() { 
    this.showFlag = Visibility.Hidden 
    setTimeout(() => { 
      this.controller.close() 
    }, 500) 
  } 
}

标签:Toast,自定义,width,CustomDialogController,HarmonyOS,controller,设置,弹窗
From: https://blog.csdn.net/weqwe6668/article/details/141717258

相关文章

  • vite3接入vue-quill:处理图片,自定义字体和字体大小,切换源码模式
    环境适用版本:node:14.21.2"vue":"^3.2.26""vite":"^3.1.0"安装模块:"@vueup/vue-quill":"^1.2.0","quill-html-edit-button":"^3.0.0","quill-image-resize-module":"^3......
  • 自定义TextView实现首尾相接跑马灯效果
    需求:TextView内容不满一行的时候不滚动,超过一行的时候缓慢滚动到最后,然后添加空白间隔继续滚动(我们项目用的是三个View一块滚动,停止应该是不一块停止的,毕竟三条内容应该不一样长,所以就需要个监听是否都停止了,如果都停止了,就一块开启继续滚动)importandroid.animation.Animato......
  • 【鸿蒙学习】HarmonyOS应用开发者高级认证 - 认证通过(附题目)
    学完时间:2024年8月29日学完排名:第192546名一、前言叨叨经过几日的休整,我终于再次挑战高级认证,并以82分的成绩堪堪越过了及格线。然而,通过考试后我惊讶地发现,原来顺利过关的人数如此众多。我逐一攻克了所有基础题目,却发现随着基础题的刷过,同行的考生越来越少,而开发者认证......
  • HarmonyOS开发实战5.0【地址交换动画案例】
    介绍本示例介绍使用显式动画 animateTo 实现左右地址交换动画。该场景多用于机票、火车票购买等出行类订票软件中。效果预览图使用说明加载完成后显示地址交换动画页面,点击中间的图标,左右两边地址交换。实现思路创建左右两边Text组件显示地址。设置初始偏移量以及文......
  • 金蝶云星空组织间结算清单增加自定义字段说明
    单据增加字段相关结算单增加,基础资料控件,映射资料。 业务单据-其他出库单增加字段 配置功能特性   创建结算清单时,会生成到自定义字段上      ......
  • 鸿蒙HarmonyOS自定义组件开发和使用_鸿蒙自定义组件
    自定义组件的介绍在开发和使用自定义组件直接,我们需要了解什么是自定义组件?在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行UI界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后......
  • HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容
    背景随着消费电子产品和移动互联网的普及,未成年人互联网普及率96.8%,超过80%的未成年人都拥有自己的上网设备,而如何引导孩子正确上网一直是家长们的担忧。市场上很多电子设备、系统推出了一些未成年人管控能力,却需要家长到各个应用去开启青少年模式,如哔哩哔哩、芒果TV、豆瓣等不同......
  • HarmonyOS NEXT未成年人模式无缝联动所有应用,过滤非适龄内容
    背景随着消费电子产品和移动互联网的普及,未成年人互联网普及率96.8%,超过80%的未成年人都拥有自己的上网设备,而如何引导孩子正确上网一直是家长们的担忧。市场上很多电子设备、系统推出了一些未成年人管控能力,却需要家长到各个应用去开启青少年模式,如哔哩哔哩、芒果TV、豆瓣等不同类......
  • HarmonyOS SDK实况窗服务
    HarmonyOSSDK实况窗服务(LiveViewKit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进入应用落地页查看......
  • net core自定义 Configuration Provider
    创建CustomConfigurationProvider首先,我们需要创建一个自定义的ConfigurationSource和ConfigurationProvider来支持配置文件的读取和监控。publicclassCustomConfigurationSource:IConfigurationSource{publicstringFilePath{get;}publicCustomConfig......