HarmonyOS NEXT - Toast和Loading使用

news2024/9/20 20:29:48

demo 地址: https://github.com/iotjin/JhHarmonyDemo
代码不定时更新,请前往github查看最新代码

HarmonyOS NEXT - Toast和Loading使用

  • 效果图
  • 调用方式
  • JhProgressHud.ets 完整代码

官方有个toast但是比较单一(官方toast promptAction),在三方库上找了一个弹框库,调整样式封装了一层

三方库地址:
@jxt/xt_hud

需要先在项目中导入三方库

ohpm install @jxt/xt_hud

OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包

效果图

请添加图片描述

调用方式

需要先全局初始化一次,否则弹框不显示
全局初始化可以放在入口的page处,或者在windowStage.loadContent 后执行初始化

以下是在第一个page的aboutToAppear方法初始化的

  aboutToAppear() {
    // 初始化Loading
    let uiContext: UIContext = this.getUIContext();
    JhProgressHUD.initUIConfig(uiContext)
  }
  • 文字
JhProgressHUD.showText('这是一条提示文字')
  • 成功
JhProgressHUD.showSuccess('加载成功')
  • 失败
JhProgressHUD.showError('加载失败')
  • 警告
JhProgressHUD.showInfo('注意注意')
  • 加载中 - 系统样式
 JhProgressHUD.showLoadingText()
 setTimeout(() => {
   JhProgressHUD.hide()
 }, 5000)
  • 加载中 - 圆环样式
 JhProgressHUD.showRingLoadingText()
 setTimeout(() => {
   JhProgressHUD.hide()
 }, 5000)
  • 下载中 - 圆环进度条
interval: number | null = null
let progress = 0
this.interval = setInterval(() => {
  progress++
  JhProgressHUD.showProgressLoadingText(progress, '下载中...')
  if (progress >= 100) {
    clearInterval(this.interval)
  }
}, 50)
  • 下载中 - 水平进度条
interval: number | null = null
let progress = 0
this.interval = setInterval(() => {
  progress++
  JhProgressHUD.showBarProgressLoadingText(progress, '下载中...')
  if (progress >= 100) {
    clearInterval(this.interval)
  }
}, 50)

JhProgressHud.ets 完整代码

///  JhProgressHud.ets
///
///  Created by iotjin on 2024/08/09.
///  description: 加载框(promptAction、三方库封装)

import { promptAction, window } from '@kit.ArkUI';
import { XTHUDLoadingOptions, XTHUDProgressOptions, XTHUDReactiveBaseOptions, XTHUDToastOptions, XTPromptHUD } from '@jxt/xt_hud';

const _bgColor = '#CC000000'
const _closeTime = 1500
const _radius = 5.0
const _fontSize = 16.0

// Toast显示位置
const _alignment: Alignment = Alignment.Center
const _offset: Offset = { dx: 0.0, dy: 0.0 }

enum _ToastType {
  text,
  success,
  error,
  info,
  loading,
}

export class JhProgressHUD {
  /// 初始化Loading(在 windowStage.loadContent 后执行初始化)
  public static initConfig(windowStage: window.WindowStage) {
    const context = windowStage.getMainWindowSync().getUIContext()
    JhProgressHUD.initXTPromptHUDConfig(context)
  }

  /// 初始化Loading(在全局入口 page 处挂载)
  public static initUIConfig(context: UIContext) {
    JhProgressHUD.initXTPromptHUDConfig(context)
  }

  /// 系统Toast
  public static showToast(loadingText: ResourceStr) {
    promptAction.showToast({
      message: loadingText,
      duration: _closeTime,
      alignment: _alignment,
      offset: _offset,
    })
  }

  /// 文字弹框
  public static showText(loadingText: ResourceStr) {
    JhProgressHUD._showToast(loadingText, _ToastType.text)
  }

  /// 成功弹框
  public static showSuccess(loadingText: ResourceStr) {
    JhProgressHUD._showToast(loadingText, _ToastType.success)
  }

  /// 失败弹框
  public static showError(loadingText: ResourceStr) {
    JhProgressHUD._showToast(loadingText, _ToastType.error)
  }

  /// 警告弹框
  public static showInfo(loadingText: ResourceStr) {
    JhProgressHUD._showToast(loadingText, _ToastType.info)
  }

  /// 加载中 - 系统样式
  public static showLoadingText(loadingText = '加载中...') {
    JhProgressHUD._showToast(loadingText, _ToastType.loading)
  }

  /// 加载中 - 圆环样式
  public static showRingLoadingText(loadingText = '加载中...') {
    JhProgressHUD._showLoading(loadingText)
  }

  /// 下载中 - 圆环进度条
  public static showProgressLoadingText(progress: number, loadingText = '正在下载...') {
    JhProgressHUD._showProgress(progress, loadingText)
  }

  /// 下载中 - 水平进度条
  public static showBarProgressLoadingText(progress: number, loadingText = '正在下载...') {
    JhProgressHUD._showBarProgress(progress, loadingText)
  }

  public static hide() {
    XTPromptHUD.hideAllToast()
    XTPromptHUD.hideAllLoading()
    XTPromptHUD.hideProgress()
    XTPromptHUD.hideCustomHUD()
  }

  /// 全局参数配置
  /// API文档 https://gitee.com/kukumalu/xthud
  private static initXTPromptHUDConfig(context: UIContext) {
    XTPromptHUD.globalConfigToast(context, (options: XTHUDToastOptions) => {
      options.isQueueMode = true // 同时只显示一个
      options.isModal = true // 是否为全屏,屏蔽交互
      options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
      options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
      options.fontSize = _fontSize
      options.font = {
        size: _fontSize,
        // weight: 600
      }
      options.borderRadius = _radius
      options.backgroundColor = _bgColor
      options.hidingDelay = _closeTime
      options.iconSize = { width: 30, height: 30 }
      options.textPadding = {
        top: 16,
        bottom: 16,
        left: 24,
        right: 24,
      }
    })
    XTPromptHUD.globalConfigLoading(context, (options: XTHUDLoadingOptions) => {
      options.isModal = true // 是否为全屏,屏蔽交互
      options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
      options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
      options.fontSize = _fontSize
      options.font = {
        size: _fontSize,
        // weight: 600,
      }
      options.borderRadius = _radius
      options.backgroundColor = _bgColor
      options.iconSize = { width: 50, height: 50 }
      options.iconMargin = {
        top: 16,
        bottom: 8,
        left: 24,
        right: 24,
      }
      options.textPadding = {
        top: 0,
        bottom: 16,
        left: 24,
        right: 24
      }
    })
    XTPromptHUD.globalConfigProgress(context, (options: XTHUDProgressOptions) => {
      options.isModal = true // 是否为全屏,屏蔽交互
      options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
      options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
      options.fontSize = _fontSize
      options.font = {
        size: _fontSize,
        // weight: 600
      }
      options.borderRadius = _radius
      options.backgroundColor = _bgColor
      options.iconSize = { width: 50, height: 50 }
      options.iconMargin = {
        top: 24,
        bottom: 16,
        left: 36,
        right: 36,
      }
      options.textPadding = {
        top: 0,
        bottom: 16,
        left: 24,
        right: 24
      }

      options.strokeWidth = 5
      options.progressFontSize = 5
      options.progressFont = {
        size: 12,
        weight: 600
      }
      options.progressTextColor = Color.White
      // options.autoHideWhenProgressCompletion = false
    })

    XTPromptHUD.globalConfigCustomHUD(context, (options: XTHUDReactiveBaseOptions) => {
      options.isModal = true // 是否为全屏,屏蔽交互
      options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
      options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
      options.maskColor = _bgColor
      // options.maskColor = '#33000000'
    })
  }

  private static _showToast(loadingText: ResourceStr, toastType: _ToastType) {
    if (toastType == _ToastType.text) {
      XTPromptHUD.showToast(loadingText)
    } else if (toastType == _ToastType.success) {
      XTPromptHUD.showSuccess(loadingText)
    } else if (toastType == _ToastType.error) {
      XTPromptHUD.showError(loadingText)
    } else if (toastType == _ToastType.info) {
      XTPromptHUD.showInfo(loadingText)
    } else if (toastType == _ToastType.loading) {
      XTPromptHUD.showLoading(loadingText, {
        iconMargin: loadingText == '' ? {
          top: 24,
          bottom: 24,
          left: 36,
          right: 36,
        } : {
          top: 16,
          bottom: 8,
          left: 24,
          right: 24,
        }
      })
    }
  }

  private static _showLoading(loadingText: ResourceStr) {
    XTPromptHUD.showRingLoading(loadingText, {
      iconSize: { width: 30, height: 30 },
      strokeWidth: 3,

      isModal: true,
      closeOnPressBack: false,
      closeOnClickOutside: false,
      fontSize: _fontSize,
      font: { size: _fontSize },
      borderRadius: _radius,
      backgroundColor: _bgColor,
      iconMargin: loadingText == '' ? {
        top: 35,
        bottom: 35,
        left: 45,
        right: 45,
      } : {
        top: 16,
        bottom: 8,
        left: 24,
        right: 24,
      },
      textPadding: {
        top: 8,
        bottom: 16,
        left: 24,
        right: 24
      },
    })
  }

  private static _showProgress(progress: number, loadingText?: ResourceStr) {
    XTPromptHUD.showProgress(progress, loadingText, {
      iconMargin: {
        top: 24,
        bottom: loadingText == '' ? 24 : 16,
        left: 36,
        right: 36,
      }
    })
  }

  private static _showBarProgress(progress: number, loadingText?: ResourceStr) {
    XTPromptHUD.showBarProgress(progress, loadingText, {
      tintColor: Color.White,
      iconMargin: {
        top: 24,
        bottom: loadingText == '' ? 24 : 16,
        left: 36,
        right: 36,
      }
    })
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TiDB】10-对 TiDB 进行 TPC-C 测试

目录 1、安装bench工具 2、插入数据 3、运行测试 4、测试结果分析 4.1、总体性能概览 4.2、事务类型详细性能 4.3、错误事务分析 4.4、结论与建议 5、清理测试数据 TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商…

C语言学习笔记 Day13(复合类型/自定义类型)

Day13 内容梳理: 目录 Chapter 9 复合类型(自定义类型) 9.1 结构体 (1)结构体变量定义、初始化 (2)嵌套结构体 (3)结构体赋值 (4)结构体和…

C Primer Plus 第4章习题

你该逆袭了 红色标注的是:错误的答案 蓝色标注的是:正确的答案 绿色标注的是:做题时有疑问的地方 练习题 一、复习题1、我的答案:正确答案: 2、3、4、5、6、7、8、9、10、11、12、 二、编程练习1、2、第4问我不会a、b、…

基于轨迹的汽车跟随系统横向控制方法

A Trajectory-Based Approach for the Lateral Control of Vehicle Following Systems 基于轨迹的汽车跟随系统横向控制方法 Abstract Abstract| A crucial task for steering an autonomous vehicle along a safe path in a vehicle following scenario is the lateral cont…

ubuntu查看CPU、内存、硬盘

1、查看CPU cat /proc/cpuinfo 我这台机器CPU是2核,所以这里是2核 或者使用如下命令也可以查看 lscpu 查看CPU使用率 top 2、查看内存 查看内存信息: free -h 查看内存使用情况: vmstat 3、硬盘 查看硬盘使用情况: df -…

用视频文件模拟摄像头进行抖音、视频号直播的无人直播机(虚拟摄像头)推流器使用说明详细介绍

无人直播机是嵌入式软硬件一体化设计,支持远程修改设备参数,远程回放设备录像,还支持3.5mm音频实时互动,以及多个视频随机轮播或者顺序轮播。无人直播机不仅稳定还节能,支持7*24小时运行,不死机不卡顿。 一…

求职利器:高频面试题与算法详解

干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…

vue3父子组件双向数据绑定v-model;父组件调用子组件事件

效果&#xff1a; 父far.vue <template><div><div>父组件内容<pre>value1:{{ value1 }}</pre><el-button type"primary">flag1:{{ flag1 }}</el-button><pre>obj1:{{ obj1 }}</pre><el-input v-model&q…

Java 入门指南:接口(Interface)

引言 在Java编程中&#xff0c;接口&#xff08;Interface&#xff09;是一种非常重要的概念&#xff0c;它不仅是面向对象编程&#xff08;OOP&#xff09;的基石之一&#xff0c;也是实现高内聚、低耦合设计原则的关键工具。接口定义了一组方法&#xff0c;但不提供这些方法…

@Mapper报红

检查pom.xml&#xff0c;导入 org.mybatis.spring.boot 依赖&#xff1a; <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency…

Java-EE 网络编程(1)

目录 一、网络初识 二、协议 协议的定义 协议分层 协议分层的好处 TCP/IP五层模型 五层协议 协议之间如何配合工作的 三、网络编程套接字 TCP/UDP特点 UDP回显服务器 UDP的socket api 回显服务器 回显客户端 一、网络初识 先了解一些核心概念&#xff1a; 局域网…

CsvExport:一个.Net高性能、低内存的CSV导出开源库

在我们项目开发中&#xff0c;导出CSV数据功能是非常常见的。 今天推荐一个高性能、低内存的CSV导出开源库。 01 项目简介 CsvExport是一个基于C#非常简单和快速的CSV导出开源库。 该开源库的核心特点&#xff1a; 导出功能兼容性高&#xff08;自动检测分隔符&#xff0c;…

CSC7720 可正、负应用5V2.1A同步整流

CSC7720是一款同步整流芯片&#xff0c;可以代替肖特基二极管提高反激变换器的效率。CSC7720 支持工作在非连续模式&#xff08;DCM&#xff09;的反激变换器中&#xff0c;其内部集成了低 RDS&#xff08;ON &#xff09;的 N 沟道功率MOSFET&#xff0c;外围应用简单&#xf…

STM32—SPI通信

1.SPI简介 四根通信线&#xff1a;SCK(Serial Clock)(时钟线)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select) 同步、全双工 支持总线挂载多设备&#xff08;一主多从&#xff09; 所有SPI设备的SCK、MOSI、MISO分别连在一起 主机…

【Python学习-UI界面】PyQt5 小部件13-Slider 拖动条

高级布局管理器&#xff0c;允许通过拖动边界来动态改变子小部件的大小。 Splitter控件提供一个手柄&#xff0c;可以拖动以调整控件的大小 样式如下: 常用方法如下&#xff1a; 序号方法描述1addWidget将小部件添加到拆分器的布局中2indexOf返回布局中小部件的索引3insetW…

炖羊肉

炖羊肉必备的两种香辛料&#xff0c;白胡椒、白芷&#xff0c;让你炖出的羊肉软嫩&#xff0c;汤汁鲜美 在烹饪艺术的广阔领域中&#xff0c;炖羊肉作为一道经典佳肴&#xff0c;其风味的层次与深度往往取决于所选香辛料的精妙搭配。其中&#xff0c;白胡椒与白芷作为炖羊肉时…

fun状态上传,并可手动控制

文章目录 引言上传原因:矛盾点:基础工程源码: 代码实操fun状态上传fun状态下发控制 引言 上传原因: 续上一节, 我们把fun像小灯一样, 加入了预警工程, 但是我们fun其实还有其他用处, 比如我们人工手动开风扇, 排风, 所以我们需要把fun的状态上传, 然后也可以通过服务器手动控制…

EmguCV学习笔记 VB.Net 2.3 Mat类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV学习笔记目录 Vb.net EmguCV学习笔记目录 C# 笔者的博客网址&#xff1a;VB.Net-CSDN博客 教程相关说明以及如何获得pdf教…

StackStorm自动化平台

1. StackStorm概述 1.1 StackStorm介绍 StackStorm是一个开源的事件驱动自动化平台&#xff0c;它允许开发者和系统管理员自动化IT和网络操作。StackStorm结合了IT运维、DevOps和网络安全团队的需求&#xff0c;提供了一个集中式的工作流自动化解决方案&#xff0c;包括事件响…

Windows10、ARM开发板、虚拟机Ubuntu可同时上网

一、Windows10端设置 1、打开网络配置 2、打开适配器 3、将window连接的wifi网卡设置为共享模式 4、查看本地连接的ip 到此&#xff0c;window10端设置完毕 二、设置虚拟机端&#xff08;Ubuntu&#xff09; 1、打开网络配置 2、打开适配器 3、查看本地连接的网卡名称 4、配置…