当前位置: 首页 > news >正文

HarmonyOS NEXT - Toast和Loading使用

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

在demo中这些组件和工具类都通过module实现了,具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

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() {// 初始化Loadinglet 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)}/// 系统Toastpublic 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/xthudprivate static initXTPromptHUDConfig(context: UIContext) {XTPromptHUD.globalConfigToast(context, (options: XTHUDToastOptions) => {options.isQueueMode = true // 同时只显示一个options.isModal = true // 是否为全屏,屏蔽交互options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCanceloptions.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCanceloptions.fontSize = _fontSizeoptions.font = {size: _fontSize,// weight: 600}options.borderRadius = _radiusoptions.backgroundColor = _bgColoroptions.hidingDelay = _closeTimeoptions.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,开启后触发返回关闭会执行 onCanceloptions.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCanceloptions.fontSize = _fontSizeoptions.font = {size: _fontSize,// weight: 600,}options.borderRadius = _radiusoptions.backgroundColor = _bgColoroptions.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,开启后触发返回关闭会执行 onCanceloptions.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCanceloptions.fontSize = _fontSizeoptions.font = {size: _fontSize,// weight: 600}options.borderRadius = _radiusoptions.backgroundColor = _bgColoroptions.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 = 5options.progressFontSize = 5options.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,开启后触发返回关闭会执行 onCanceloptions.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCanceloptions.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,}})}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IndexError: list index out of range | 列表索引超出范围完美解决方法
  • 【STM32 FreeRTOS】软件定时器
  • C/C++ 数学运算与数学函数
  • 【MySQL】表的设计
  • ECMAScript6语法:类
  • 常见编码形式特征汇总(1)
  • 数据库根据日期统计SQL编写记录
  • c语言-经典例题
  • Redis 为什么这么快?
  • Ant Design Vue 快速上手指南 + 排坑
  • 单片机内存映射
  • wtv-next 宝塔更新教程
  • 计算数学精解【14】-Maxima计算精解【2】
  • VUE3请求意外报跨越错误或者500错误问题
  • 前端内容简单记录
  • 网络传输文件的问题
  • [deviceone开发]-do_Webview的基本示例
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • android 一些 utils
  • css系列之关于字体的事
  • HashMap剖析之内部结构
  • java8-模拟hadoop
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • leetcode46 Permutation 排列组合
  • Netty源码解析1-Buffer
  • React-redux的原理以及使用
  • SpiderData 2019年2月16日 DApp数据排行榜
  • tab.js分享及浏览器兼容性问题汇总
  • 产品三维模型在线预览
  • 服务器之间,相同帐号,实现免密钥登录
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 首页查询功能的一次实现过程
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 《码出高效》学习笔记与书中错误记录
  • k8s使用glusterfs实现动态持久化存储
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • MPAndroidChart 教程:Y轴 YAxis
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #Linux(权限管理)
  • #pragma 指令
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (Java数据结构)ArrayList
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Ruby)Ubuntu12.04安装Rails环境
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (回溯) LeetCode 46. 全排列
  • (三)elasticsearch 源码之启动流程分析