HarmonyOS NEXT - Toast和Loading利用

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

demo 地址: https://github.com/iotjin/JhHarmonyDemo
代码不定时更新,请前往github查看最新代码
    在demo中这些组件和工具类都通过module实现了,具体可以参考HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils
  
  
   官方有个toast但是比较单一(官方toast promptAction),在三方库上找了一个弹框库,调解样式封装了一层
  三方库地址:
@jxt/xt_hud
   需要先在项目中导入三方库
  1. ohpm install @jxt/xt_hud
复制代码
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
效果图


调用方式

   需要先全局初始化一次,否则弹框不显示
全局初始化可以放在入口的page处,或者在windowStage.loadContent 后执行初始化
  以下是在第一个page的aboutToAppear方法初始化的
  1.   aboutToAppear() {
  2.     // 初始化Loading
  3.     let uiContext: UIContext = this.getUIContext();
  4.     JhProgressHUD.initUIConfig(uiContext)
  5.   }
复制代码


  • 笔墨
  1. JhProgressHUD.showText('这是一条提示文字')
复制代码


  • 成功
  1. JhProgressHUD.showSuccess('加载成功')
复制代码


  • 失败
  1. JhProgressHUD.showError('加载失败')
复制代码


  • 告诫
  1. JhProgressHUD.showInfo('注意注意')
复制代码


  • 加载中 - 系统样式
  1. JhProgressHUD.showLoadingText()
  2. setTimeout(() => {
  3.    JhProgressHUD.hide()
  4. }, 5000)
复制代码


  • 加载中 - 圆环样式
  1. JhProgressHUD.showRingLoadingText()
  2. setTimeout(() => {
  3.    JhProgressHUD.hide()
  4. }, 5000)
复制代码


  • 下载中 - 圆环进度条
  1. interval: number | null = null
  2. let progress = 0
  3. this.interval = setInterval(() => {
  4.   progress++
  5.   JhProgressHUD.showProgressLoadingText(progress, '下载中...')
  6.   if (progress >= 100) {
  7.     clearInterval(this.interval)
  8.   }
  9. }, 50)
复制代码


  • 下载中 - 水平进度条
  1. interval: number | null = null
  2. let progress = 0
  3. this.interval = setInterval(() => {
  4.   progress++
  5.   JhProgressHUD.showBarProgressLoadingText(progress, '下载中...')
  6.   if (progress >= 100) {
  7.     clearInterval(this.interval)
  8.   }
  9. }, 50)
复制代码
JhProgressHud.ets 完备代码

  1. ///  JhProgressHud.ets
  2. ///
  3. ///  Created by iotjin on 2024/08/09.
  4. ///  description: 加载框(promptAction、三方库封装)
  5. import { promptAction, window } from '@kit.ArkUI';
  6. import { XTHUDLoadingOptions, XTHUDProgressOptions, XTHUDReactiveBaseOptions, XTHUDToastOptions, XTPromptHUD } from '@jxt/xt_hud';
  7. const _bgColor = '#CC000000'
  8. const _closeTime = 1500
  9. const _radius = 5.0
  10. const _fontSize = 16.0
  11. // Toast显示位置
  12. const _alignment: Alignment = Alignment.Center
  13. const _offset: Offset = { dx: 0.0, dy: 0.0 }
  14. enum _ToastType {
  15.   text,
  16.   success,
  17.   error,
  18.   info,
  19.   loading,
  20. }
  21. export class JhProgressHUD {
  22.   /// 初始化Loading(在 windowStage.loadContent 后执行初始化)
  23.   public static initConfig(windowStage: window.WindowStage) {
  24.     const context = windowStage.getMainWindowSync().getUIContext()
  25.     JhProgressHUD.initXTPromptHUDConfig(context)
  26.   }
  27.   /// 初始化Loading(在全局入口 page 处挂载)
  28.   public static initUIConfig(context: UIContext) {
  29.     JhProgressHUD.initXTPromptHUDConfig(context)
  30.   }
  31.   /// 系统Toast
  32.   public static showToast(loadingText: ResourceStr) {
  33.     promptAction.showToast({
  34.       message: loadingText,
  35.       duration: _closeTime,
  36.       alignment: _alignment,
  37.       offset: _offset,
  38.     })
  39.   }
  40.   /// 文字弹框
  41.   public static showText(loadingText: ResourceStr) {
  42.     JhProgressHUD._showToast(loadingText, _ToastType.text)
  43.   }
  44.   /// 成功弹框
  45.   public static showSuccess(loadingText: ResourceStr) {
  46.     JhProgressHUD._showToast(loadingText, _ToastType.success)
  47.   }
  48.   /// 失败弹框
  49.   public static showError(loadingText: ResourceStr) {
  50.     JhProgressHUD._showToast(loadingText, _ToastType.error)
  51.   }
  52.   /// 警告弹框
  53.   public static showInfo(loadingText: ResourceStr) {
  54.     JhProgressHUD._showToast(loadingText, _ToastType.info)
  55.   }
  56.   /// 加载中 - 系统样式
  57.   public static showLoadingText(loadingText = '加载中...') {
  58.     JhProgressHUD._showToast(loadingText, _ToastType.loading)
  59.   }
  60.   /// 加载中 - 圆环样式
  61.   public static showRingLoadingText(loadingText = '加载中...') {
  62.     JhProgressHUD._showLoading(loadingText)
  63.   }
  64.   /// 下载中 - 圆环进度条
  65.   public static showProgressLoadingText(progress: number, loadingText = '正在下载...') {
  66.     JhProgressHUD._showProgress(progress, loadingText)
  67.   }
  68.   /// 下载中 - 水平进度条
  69.   public static showBarProgressLoadingText(progress: number, loadingText = '正在下载...') {
  70.     JhProgressHUD._showBarProgress(progress, loadingText)
  71.   }
  72.   public static hide() {
  73.     XTPromptHUD.hideAllToast()
  74.     XTPromptHUD.hideAllLoading()
  75.     XTPromptHUD.hideProgress()
  76.     XTPromptHUD.hideCustomHUD()
  77.   }
  78.   /// 全局参数配置
  79.   /// API文档 https://gitee.com/kukumalu/xthud
  80.   private static initXTPromptHUDConfig(context: UIContext) {
  81.     XTPromptHUD.globalConfigToast(context, (options: XTHUDToastOptions) => {
  82.       options.isQueueMode = true // 同时只显示一个
  83.       options.isModal = true // 是否为全屏,屏蔽交互
  84.       options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
  85.       options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
  86.       options.fontSize = _fontSize
  87.       options.font = {
  88.         size: _fontSize,
  89.         // weight: 600
  90.       }
  91.       options.borderRadius = _radius
  92.       options.backgroundColor = _bgColor
  93.       options.hidingDelay = _closeTime
  94.       options.iconSize = { width: 30, height: 30 }
  95.       options.textPadding = {
  96.         top: 16,
  97.         bottom: 16,
  98.         left: 24,
  99.         right: 24,
  100.       }
  101.     })
  102.     XTPromptHUD.globalConfigLoading(context, (options: XTHUDLoadingOptions) => {
  103.       options.isModal = true // 是否为全屏,屏蔽交互
  104.       options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
  105.       options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
  106.       options.fontSize = _fontSize
  107.       options.font = {
  108.         size: _fontSize,
  109.         // weight: 600,
  110.       }
  111.       options.borderRadius = _radius
  112.       options.backgroundColor = _bgColor
  113.       options.iconSize = { width: 50, height: 50 }
  114.       options.iconMargin = {
  115.         top: 16,
  116.         bottom: 8,
  117.         left: 24,
  118.         right: 24,
  119.       }
  120.       options.textPadding = {
  121.         top: 0,
  122.         bottom: 16,
  123.         left: 24,
  124.         right: 24
  125.       }
  126.     })
  127.     XTPromptHUD.globalConfigProgress(context, (options: XTHUDProgressOptions) => {
  128.       options.isModal = true // 是否为全屏,屏蔽交互
  129.       options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
  130.       options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
  131.       options.fontSize = _fontSize
  132.       options.font = {
  133.         size: _fontSize,
  134.         // weight: 600
  135.       }
  136.       options.borderRadius = _radius
  137.       options.backgroundColor = _bgColor
  138.       options.iconSize = { width: 50, height: 50 }
  139.       options.iconMargin = {
  140.         top: 24,
  141.         bottom: 16,
  142.         left: 36,
  143.         right: 36,
  144.       }
  145.       options.textPadding = {
  146.         top: 0,
  147.         bottom: 16,
  148.         left: 24,
  149.         right: 24
  150.       }
  151.       options.strokeWidth = 5
  152.       options.progressFontSize = 5
  153.       options.progressFont = {
  154.         size: 12,
  155.         weight: 600
  156.       }
  157.       options.progressTextColor = Color.White
  158.       // options.autoHideWhenProgressCompletion = false
  159.     })
  160.     XTPromptHUD.globalConfigCustomHUD(context, (options: XTHUDReactiveBaseOptions) => {
  161.       options.isModal = true // 是否为全屏,屏蔽交互
  162.       options.closeOnPressBack = false // 控制是否点击系统返回键时关闭 HUD,默认 false,开启后触发返回关闭会执行 onCancel
  163.       options.closeOnClickOutside = false // 控制是否点击 HUD 背景时关闭(isModal 为 true 时生效),默认 false,开启后触发点击背景关闭会执行 onCancel
  164.       options.maskColor = _bgColor
  165.       // options.maskColor = '#33000000'
  166.     })
  167.   }
  168.   private static _showToast(loadingText: ResourceStr, toastType: _ToastType) {
  169.     if (toastType == _ToastType.text) {
  170.       XTPromptHUD.showToast(loadingText)
  171.     } else if (toastType == _ToastType.success) {
  172.       XTPromptHUD.showSuccess(loadingText)
  173.     } else if (toastType == _ToastType.error) {
  174.       XTPromptHUD.showError(loadingText)
  175.     } else if (toastType == _ToastType.info) {
  176.       XTPromptHUD.showInfo(loadingText)
  177.     } else if (toastType == _ToastType.loading) {
  178.       XTPromptHUD.showLoading(loadingText, {
  179.         iconMargin: loadingText == '' ? {
  180.           top: 24,
  181.           bottom: 24,
  182.           left: 36,
  183.           right: 36,
  184.         } : {
  185.           top: 16,
  186.           bottom: 8,
  187.           left: 24,
  188.           right: 24,
  189.         }
  190.       })
  191.     }
  192.   }
  193.   private static _showLoading(loadingText: ResourceStr) {
  194.     XTPromptHUD.showRingLoading(loadingText, {
  195.       iconSize: { width: 30, height: 30 },
  196.       strokeWidth: 3,
  197.       isModal: true,
  198.       closeOnPressBack: false,
  199.       closeOnClickOutside: false,
  200.       fontSize: _fontSize,
  201.       font: { size: _fontSize },
  202.       borderRadius: _radius,
  203.       backgroundColor: _bgColor,
  204.       iconMargin: loadingText == '' ? {
  205.         top: 35,
  206.         bottom: 35,
  207.         left: 45,
  208.         right: 45,
  209.       } : {
  210.         top: 16,
  211.         bottom: 8,
  212.         left: 24,
  213.         right: 24,
  214.       },
  215.       textPadding: {
  216.         top: 8,
  217.         bottom: 16,
  218.         left: 24,
  219.         right: 24
  220.       },
  221.     })
  222.   }
  223.   private static _showProgress(progress: number, loadingText?: ResourceStr) {
  224.     XTPromptHUD.showProgress(progress, loadingText, {
  225.       iconMargin: {
  226.         top: 24,
  227.         bottom: loadingText == '' ? 24 : 16,
  228.         left: 36,
  229.         right: 36,
  230.       }
  231.     })
  232.   }
  233.   private static _showBarProgress(progress: number, loadingText?: ResourceStr) {
  234.     XTPromptHUD.showBarProgress(progress, loadingText, {
  235.       tintColor: Color.White,
  236.       iconMargin: {
  237.         top: 24,
  238.         bottom: loadingText == '' ? 24 : 16,
  239.         left: 36,
  240.         right: 36,
  241.       }
  242.     })
  243.   }
  244. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表