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

鸿蒙NEXT开发土司工具类(ArkTs)

import promptAction from '@ohos.promptAction';

/**
 * TODO Toast默认样式参数
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastConfig {
  duration: number = 2000; // 显示时长(1500ms-10000ms)
  duration_short: number = 1500; // 显示时长(1500ms)
  duration_long: number = 10000; // 显示时长(10000ms)
  showMode: promptAction.ToastShowMode = promptAction.ToastShowMode.DEFAULT; // 是否显示在应用之上
  alignment?: Alignment; // 对齐方式,默认值:undefined,默认底部偏上位置
  bottom: string | number = '80vp'; // 设置弹窗底部边框距离导航条的高度
  offset: Offset = { dx: 0, dy: 0 }; // 在对齐方式上的偏移,默认值:{dx:0, dy:0}
  textColor: ResourceColor = Color.White; // 文本提示框文本颜色,默认值:Color.Black
  backgroundColor: ResourceColor = '#CC000000'; // 文本提示框背板颜色,默认值:Color.Transparent
  backgroundBlurStyle: BlurStyle = BlurStyle.NONE; // 文本提示框背板模糊材质,默认值:BlurStyle.COMPONENT_ULTRA_THICK
  shadow: ShadowOptions | ShadowStyle = ShadowStyle.OUTER_DEFAULT_MD; // 文本提示框背板阴影,默认值:ShadowStyle.OUTER_DEFAULT_MD
}

/**
 * TODO Toast基本参数类
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastOptions {
  duration?: number; // 显示时长(1500ms-10000ms)
  showMode?: promptAction.ToastShowMode; // 是否显示在应用之上
  alignment?: Alignment; // 对齐方式,默认值:undefined,默认底部偏上位置
  bottom?: string | number; // 设置弹窗底部边框距离导航条的高度
  offset?: Offset; // 在对齐方式上的偏移,默认值:{dx:0, dy:0}
  textColor?: ResourceColor; // 文本提示框文本颜色,默认值:Color.Black
  backgroundColor?: ResourceColor; // 文本提示框背板颜色,默认值:Color.Transparent
  backgroundBlurStyle?: BlurStyle; // 文本提示框背板模糊材质,默认值:BlurStyle.COMPONENT_ULTRA_THICK
  shadow?: ShadowOptions | ShadowStyle; // 文本提示框背板阴影,默认值:ShadowStyle.OUTER_DEFAULT_MD
}

/**
 * TODO 土司工具类
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastUtil {
  private static defaultConfig: ToastConfig = new ToastConfig(); // 默认样式

  /**
   * 设置默认统一样式
   * @param configs 回调函数,用于修改默认配置
   */
  static setDefaultConfig(configs: (config: ToastConfig) => void): void {
    configs(ToastUtil.defaultConfig);
  }

  /**
   * 弹出土司,默认时长为2s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(显示时长、距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showToast(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 0);
  }

  /**
   * 弹出土司,时长为1.5s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showShort(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 1);
  }

  /**
   * 弹出土司,时长为10s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showLong(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 2);
  }

  /**
   * 内部方法:统一处理 Toast 的显示逻辑
   * @param message 提示消息
   * @param options 可选参数
   * @param type 类型标识(0: 默认,1: 短时间,2: 长时间)
   */
  private static show(message: string | Resource, options: ToastOptions, type: number): void {
    if (!message || (typeof message === 'string' && message.trim() === '')) {
      console.warn('ToastUtil: Empty or invalid message provided.');
      return;
    }

    const finalOptions = ToastUtil.initToastDefault(options, type);

    promptAction.showToast({
      message,
      duration: finalOptions.duration,
      showMode: finalOptions.showMode,
      alignment: finalOptions.alignment,
      bottom: finalOptions.bottom,
      offset: finalOptions.offset,
      textColor: finalOptions.textColor,
      backgroundColor: finalOptions.backgroundColor,
      backgroundBlurStyle: finalOptions.backgroundBlurStyle,
      shadow: finalOptions.shadow,
    });
  }

  /**
   * 初始化 ToastOptions 参数
   * @param options 用户传入的选项
   * @param type 类型标识(0: 默认,1: 短时间,2: 长时间)
   * @returns 合并后的完整选项
   */
  private static initToastDefault(options: ToastOptions, type: number): ToastOptions {
    const defaultDuration =
      type === 1 ? ToastUtil.defaultConfig.duration_short :
        type === 2 ? ToastUtil.defaultConfig.duration_long :
        ToastUtil.defaultConfig.duration;

    return {
      duration: options.duration ?? defaultDuration,
      showMode: options.showMode ?? ToastUtil.defaultConfig.showMode,
      alignment: options.alignment ?? ToastUtil.defaultConfig.alignment,
      bottom: options.bottom ?? ToastUtil.defaultConfig.bottom,
      offset: options.offset ?? ToastUtil.defaultConfig.offset,
      textColor: options.textColor ?? ToastUtil.defaultConfig.textColor,
      backgroundColor: options.backgroundColor ?? ToastUtil.defaultConfig.backgroundColor,
      backgroundBlurStyle: options.backgroundBlurStyle ?? ToastUtil.defaultConfig.backgroundBlurStyle,
      shadow: options.shadow ?? ToastUtil.defaultConfig.shadow,
    };
  }
}

代码如下:
 

import promptAction from '@ohos.promptAction';

/**
 * TODO Toast默认样式参数
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastConfig {
  duration: number = 2000; // 显示时长(1500ms-10000ms)
  duration_short: number = 1500; // 显示时长(1500ms)
  duration_long: number = 10000; // 显示时长(10000ms)
  showMode: promptAction.ToastShowMode = promptAction.ToastShowMode.DEFAULT; // 是否显示在应用之上
  alignment?: Alignment; // 对齐方式,默认值:undefined,默认底部偏上位置
  bottom: string | number = '80vp'; // 设置弹窗底部边框距离导航条的高度
  offset: Offset = { dx: 0, dy: 0 }; // 在对齐方式上的偏移,默认值:{dx:0, dy:0}
  textColor: ResourceColor = Color.White; // 文本提示框文本颜色,默认值:Color.Black
  backgroundColor: ResourceColor = '#CC000000'; // 文本提示框背板颜色,默认值:Color.Transparent
  backgroundBlurStyle: BlurStyle = BlurStyle.NONE; // 文本提示框背板模糊材质,默认值:BlurStyle.COMPONENT_ULTRA_THICK
  shadow: ShadowOptions | ShadowStyle = ShadowStyle.OUTER_DEFAULT_MD; // 文本提示框背板阴影,默认值:ShadowStyle.OUTER_DEFAULT_MD
}

/**
 * TODO Toast基本参数类
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastOptions {
  duration?: number; // 显示时长(1500ms-10000ms)
  showMode?: promptAction.ToastShowMode; // 是否显示在应用之上
  alignment?: Alignment; // 对齐方式,默认值:undefined,默认底部偏上位置
  bottom?: string | number; // 设置弹窗底部边框距离导航条的高度
  offset?: Offset; // 在对齐方式上的偏移,默认值:{dx:0, dy:0}
  textColor?: ResourceColor; // 文本提示框文本颜色,默认值:Color.Black
  backgroundColor?: ResourceColor; // 文本提示框背板颜色,默认值:Color.Transparent
  backgroundBlurStyle?: BlurStyle; // 文本提示框背板模糊材质,默认值:BlurStyle.COMPONENT_ULTRA_THICK
  shadow?: ShadowOptions | ShadowStyle; // 文本提示框背板阴影,默认值:ShadowStyle.OUTER_DEFAULT_MD
}

/**
 * TODO 土司工具类
 * author: 鸿蒙布道师
 * since: 2025/04/02
 */
export class ToastUtil {
  private static defaultConfig: ToastConfig = new ToastConfig(); // 默认样式

  /**
   * 设置默认统一样式
   * @param configs 回调函数,用于修改默认配置
   */
  static setDefaultConfig(configs: (config: ToastConfig) => void): void {
    configs(ToastUtil.defaultConfig);
  }

  /**
   * 弹出土司,默认时长为2s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(显示时长、距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showToast(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 0);
  }

  /**
   * 弹出土司,时长为1.5s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showShort(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 1);
  }

  /**
   * 弹出土司,时长为10s,距离底部默认为80vp
   * @param message 提示消息
   * @param options 可选参数(距离屏幕底部的位置、是否显示在应用之上等)
   */
  static showLong(message: string | Resource, options: ToastOptions = {}): void {
    ToastUtil.show(message, options, 2);
  }

  /**
   * 内部方法:统一处理 Toast 的显示逻辑
   * @param message 提示消息
   * @param options 可选参数
   * @param type 类型标识(0: 默认,1: 短时间,2: 长时间)
   */
  private static show(message: string | Resource, options: ToastOptions, type: number): void {
    if (!message || (typeof message === 'string' && message.trim() === '')) {
      console.warn('ToastUtil: Empty or invalid message provided.');
      return;
    }

    const finalOptions = ToastUtil.initToastDefault(options, type);

    promptAction.showToast({
      message,
      duration: finalOptions.duration,
      showMode: finalOptions.showMode,
      alignment: finalOptions.alignment,
      bottom: finalOptions.bottom,
      offset: finalOptions.offset,
      textColor: finalOptions.textColor,
      backgroundColor: finalOptions.backgroundColor,
      backgroundBlurStyle: finalOptions.backgroundBlurStyle,
      shadow: finalOptions.shadow,
    });
  }

  /**
   * 初始化 ToastOptions 参数
   * @param options 用户传入的选项
   * @param type 类型标识(0: 默认,1: 短时间,2: 长时间)
   * @returns 合并后的完整选项
   */
  private static initToastDefault(options: ToastOptions, type: number): ToastOptions {
    const defaultDuration =
      type === 1 ? ToastUtil.defaultConfig.duration_short :
        type === 2 ? ToastUtil.defaultConfig.duration_long :
        ToastUtil.defaultConfig.duration;

    return {
      duration: options.duration ?? defaultDuration,
      showMode: options.showMode ?? ToastUtil.defaultConfig.showMode,
      alignment: options.alignment ?? ToastUtil.defaultConfig.alignment,
      bottom: options.bottom ?? ToastUtil.defaultConfig.bottom,
      offset: options.offset ?? ToastUtil.defaultConfig.offset,
      textColor: options.textColor ?? ToastUtil.defaultConfig.textColor,
      backgroundColor: options.backgroundColor ?? ToastUtil.defaultConfig.backgroundColor,
      backgroundBlurStyle: options.backgroundBlurStyle ?? ToastUtil.defaultConfig.backgroundBlurStyle,
      shadow: options.shadow ?? ToastUtil.defaultConfig.shadow,
    };
  }
}

http://www.dtcms.com/a/108632.html

相关文章:

  • 前端中rem,vh,vw
  • 网约车APP评价系统从0到1
  • 红宝书第二十六讲:详解Web Workers:专用、共享、Service Worker
  • PyTorch中Linear全连接层
  • 视频设备轨迹回放平台EasyCVR如何搭建公共娱乐场所远程视频监控系统
  • 铁路语义分割数据下载RailSem19: A Dataset for Semantic Rail Scene Understanding
  • 使用Android 原生LocationManager获取经纬度
  • 教育软件 UI 设计:打造吸睛又实用的学习入口
  • SELinux
  • Leetcode-100 二分查找常见操作总结
  • 数据点燃创新引擎:数据驱动的产品开发如何重塑未来?
  • Airflow量化入门系列:第一章 Apache Airflow 基础
  • 红宝书第二十五讲:客户端存储(Cookie、localStorage、IndexedDB):浏览器里的“记忆盒子”
  • Leetcode 6233 -- DFS序列 | 两遍DFS
  • Vue中JSEncrypt 数据加密和解密处理
  • Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
  • wireshak抓手机包 wifi手机抓包工具
  • linux 时钟
  • 【爬虫】网页抓包工具--Fiddler
  • 【Audio开发二】Android原生音量曲线调整说明
  • LInux基础指令(二)
  • 【VS+Qt】vs2022打开 vs2015项目
  • FastAPI中Pydantic异步分布式唯一性校验
  • 机器视觉调试——现场链接相机(解决各种相机链接问题)
  • 自然语言处理(22:(第六章2.)​seq2seq模型的实现​)
  • 图片懒加载、无限滚动加载、监听元素进入视口加载数据。「IntersectionObserver」
  • scala编程语言
  • 服务器数据恢复—Raid6阵列硬盘故障掉线,上层虚拟机数据如何恢复?
  • linux-firewalld防火墙允许端口
  • 【SLAM经典算法详解】Ubuntu 20.04部署LeGO-LOAM:从环境配置到KITTI适配,解决常见编译错误