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,
};
}
}