# hptdialog **Repository Path**: fish_in_the_desert/gancao-hptdialog ## Basic Information - **Project Name**: hptdialog - **Description**: `hptdialog` 一款极简的弹框库,基于自定义弹框`CustomDialog`进行封装,并简化了其调用方式,帮助开发者快速实现自定义的弹框效果,目前包含 `hptdialog` 和 `hptBottomSheet` - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-07-10 - **Last Updated**: 2025-07-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HPTDialog # 简介 `HPTDialog` 一款极简的弹框库,基于自定义弹框`CustomDialog`进行封装,并简化了其调用方式(在任何地方只需要调用`show()`方法即可),帮助开发者快速实现自定义的弹框效果,目前包含 `HPTDialog` 和 `HPTBottomSheet` 以及 `HPTLoading` # 效果展示 ___ # 下载安装 `ohpm install @gancao/hptdialog` # 接口与参数说明 - ## `HPTPopup` **一个自定义的组件,需要在启动页作为底层组件** - ## `HPTDialogUtil` **用于弹出确认类型的弹框** #### 接口 | **方法名** | **入参** | **描述** | |--------------------------------------|-----------------------------------------------------------------------------------------------------------------|-------------| | HPTDialogUtil.show | info: DialogInfo 显示的内容包括title、message等
config?: DialogConfig 弹框的样式配置 | 显示一个弹框 | | HPTDialogUtil.showWithComponent | component: Object 当前所属页面的this
info: DialogInfo 显示的内容包括title、message等
config?: DialogConfig 弹框的样式配置 | 显示一个弹框 | | HPTDialogUtil.showInput | info: DialogInputInfo 显示的内容包括title、text等
config?: DialogConfig 弹框的样式配置 | 显示一个带输入框的弹框 | | HPTDialogUtil.showInputWithComponent | component: Object 当前所属页面的this
info: DialogInputInfo 显示的内容包括title、text等
config?: DialogConfig 弹框的样式配置 | 显示一个带输入框的弹框 | #### `DialogInfo` 属性(描述弹框的内容) | 属性名 | 类型 | 描述 | |-------------------------------|-------------------------------------------|--------------------------------------------------------------------| | `title` | `ResourceStr` | 弹框标题,可选 | | `message` | `ResourceStr` | 弹框消息内容,可选 | | `customMessage` | `CustomBuilder` | 自定义中间内容,用于覆盖`message`字段。注意:`messagePadding`对此字段无效 | | `buttons` | `DialogButton[]` | 当需要多个按钮时使用,可以覆盖默认的取消和确认按钮;
DialogButton 类型见 DialogButton 参数说明 | | `cancel` | `ResourceStr` | 取消按钮文字,默认为“取消” | | `confirm` | `ResourceStr` | 确认按钮文字,默认为“确定” | | `cancelOnClick` | `(controller?: DialogController) => void` | 取消按钮点击回调函数,通过`controller`可以控制是否关闭弹框 | | `confirmOnClick` | `(controller?: DialogController) => void` | 确认按钮点击回调函数,同上,根据`controller`控制关闭逻辑 | | `disableClickButtonAutoClose` | `boolean` | 是否禁止点击按钮后自动关闭弹框,默认自动关闭 | #### `DialogInputInfo` | 属性名 | 类型 | 默认值 | 描述 | |-----------------|---------------------------|---------------------|------------------------------| | `placeholder` | `ResourceStr` | - | 输入框提示文案 | | `text` | `string` | - | 初始化内容 | | `errorMsg` | `string` | - | 错误提示信息 | | `defaultFocus` | `boolean` | `true` | 是否默认聚焦 | | `inputType` | `InputType` | `Normal` | 输入类型,默认为普通文本输入 | | `enterKeyType` | `EnterKeyType` | `EnterKeyType.Done` | 回车键类型,默认为完成(Done) | | `maxLength` | `number` | - | 文本最大输入字符数,未指定则无限制 | | `textAlign` | `TextAlign` | `TextAlign.Start` | 文本对齐方式,默认左对齐 | | `showUnderline` | `boolean` | `false` | 是否显示下划线 | | `maxLines` | `number` | `3` | 设置内联输入风格编辑态时文本可显示的最大行数。默认值:3 | | `selectAll` | `boolean` | `false` | 初始状态,是否全选文本。默认值:false | | `onChange` | `(value: string) => void` | - | 编辑回调,文本变化时触发的函数 | | `enable` | `boolean` | `true` | 是否可用 | #### `DialogConfig` 属性(描述弹框的样式) | 属性名 | 类型 | 描述 | |---------------------------------|---------------------------------|---------------------------------------------------------| | `margin` | `Margin` | 距屏幕的间距 | | `padding` | `Padding` | 内间距 | | `border` | `BorderOptions` | 边框(圆角) | | `backgroundColor` | `ResourceColor` | 内容背景颜色 | | `fontSize` | `number 或 string 或 Resource` | 标题字体大小 | | `fontColor` | `ResourceColor` | 标题字体颜色 | | `fontWeight` | `number 或 FontWeight 或 string` | 字体粗细 | | `titlePadding` | `Padding` | 标题区域的内边距 | | `messageFontSize` | `number 或 string 或 Resource` | 内容字体大小 | | `messageFontColor` | `ResourceColor` | 内容字体颜色 | | `messageFontWeight` | `number 或 FontWeight 或 string` | 内容字体粗细 | | `messagePadding` | `Padding` | 内容区域的内边距 | | `buttonsUseVerticalLayoutCount` | `number` | 按钮改为垂直布局时的数量,默认小于此数量时,采用Row横向布局,如果大于等于此数量时,换成Column纵向布局 | | `buttonVerticalSpacing` | `string 或 number` | 按钮垂直间距 | | `buttonHorizontalSpacing` | `string 或 number` | 按钮水平间距 | | `inputFontSize` | `number 或 string 或 Resource` | 输入框文字大小 | | `inputFontColor` | `ResourceColor` | 输入框文字颜色 | | `inputFontWeight` | `number 或 FontWeight 或 string` | 输入框字体粗细 | | `placeholderFont` | `Font` | 提示文案字体样式 | | `placeholderFontColor` | `ResourceColor` | 提示文案颜色 | | `inputHeight` | `Length` | 输入框高度 | | `inputBackgroundColor` | `ResourceColor` | 输入框背景色 | | `selectedBackgroundColor` | `ResourceColor` | 文本选中时的底板颜色 | | `inputBorder` | `BorderOptions` | 输入框边框样式 | | `caretColor` | `ResourceColor` | 输入框光标颜色 | | `inputPadding` | `Padding` | 输入框内边距 | | `inputMargin` | `Padding` | 输入框外边距 | | `customKeyboard` | `CustomBuilder` | 自定义键盘 | | `cancelButtonStyle` | `CancelButtonStyle` | 清除按钮显示状态 | | `cancelButtonSize` | `Length` | 清除按钮大小 | | `cancelButtonIconColor` | `ResourceColor` | 清除按钮颜色 | #### `DialogButton` 属性(弹框按钮) | 属性名 | 类型 | 描述 | |------------|-------------------------------------------|------------------------------------| | `name` | `string` | 按钮的文本名称 | | `style?` | `DialogButtonStyle` | 按钮的样式配置,可选 | | `onClick?` | `(controller?: DialogController) => void` | 按钮点击时触发的回调函数,可接收一个自定义对话框控制器作为参数,可选 | #### `DialogButtonStyle` 属性(弹框按钮样式) | 属性名 | 类型 | 描述 | |-------------------|--------------------------------|-----------------------| | `height` | `Length` | 按钮的高度设置 | | `fontSize` | `number 或 string 或 Resource` | 文本的字体大小,支持数字、字符串或资源引用 | | `fontColor` | `ResourceColor` | 文本的颜色,通过资源定义 | | `fontWeight` | `number 或 FontWeight 或 string` | 文本的字体粗细 | | `backgroundColor` | `ResourceColor` | 按钮的背景颜色 | | `border` | `BorderOptions` | 按钮边框的样式设置 | - ## `HPTBottomSheetUtil` #### 接口 | **方法名** | **入参** | **描述** | |--------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|----------| | HPTBottomSheetUtil.show | info: BottomSheetInfo 显示的内容包括title、contentList等
config?: BottomSheetConfig 弹框的样式配置 | 显示一个底部弹框 | | HPTBottomSheetUtil.showWithComponent | component: Object 当前所属页面的this
info: BottomSheetInfo 显示的内容包括title、contentList等
config?: BottomSheetConfig 弹框的样式配置 | 显示一个底部弹框 | #### `BottomSheetInfo` 属性(描述弹框的内容) | 属性名 | 类型 | 描述 | |-------------------------------|--------------------------------|--------------------------------------------------------------------| | `title` | `ResourceStr` | 底部弹窗的标题 | | `contentList` | `ResourceStr[]` | 以列表形式展示的内容,默认不提供 | | `selectedIndex` | `number` | 默认选中的行索引 | | `customContent` | `CustomBuilder` | 自定义内容,用于覆盖`contentList`字段 | | `cancel` | `ResourceStr` | 取消按钮的文字,默认为“取消” | | `disableShowCancel` | `boolean` | 是否禁止显示取消按钮,默认不禁止 | | `cancelOnClick` | `(controller?) => void` | 取消按钮点击回调函数,接收一个可选的`DialogController`参数,用于控制弹窗关闭逻辑 | | `confirmOnClick` | `(index, controller?) => void` | 选中行的回调函数,接收行的索引`index`和一个可选的`DialogController`参数,用于执行相应操作并控制弹窗关闭逻辑 | | `disableClickButtonAutoClose` | `boolean` | 是否禁止点击按钮后自动关闭弹窗,默认自动关闭 | #### `BottomSheetConfig` 属性(描述弹框的样式) | 属性名 | 类型 | 描述 | |-------------------------------|--------------------------------|-------------------| | `backgroundColor` | `ResourceColor` | 弹窗的背景颜色 | | `borderRadius` | `number` | 底部弹窗的圆角大小 | | `maxListHeight` | `number` | 列表选项模式下,弹窗的最大显示高度 | | `itemHeight` | `number` | 每个列表项的高度 | | `itemBackgroundColor` | `ResourceColor` | 列表项的背景颜色 | | `itemSelectedBackgroundColor` | `ResourceColor` | 选中列表项的背景颜色 | | `dividerColor` | `ResourceColor` | 分割线颜色 | | `dividerHeight` | `Length` | 分割线高度 | | `cancelSpace` | `Length` | 取消按钮与其它元素之间的间距 | | `cancelHeight` | `Length` | 取消按钮的高度 | | `titleAlign` | `TextAlign` | 标题的对齐方式 | | `titlePadding` | `Padding` | 标题区域的内边距 | | `titleFontSize` | `number 或 string 或 Resource` | 标题的字体大小 | | `titleFontColor` | `ResourceColor` | 标题的字体颜色 | | `titleFontWeight` | `number 或 FontWeight 或 string` | 标题的字体粗细 | | `fontSize` | `number 或 string 或 Resource` | 文字的字体大小 | | `fontColor` | `ResourceColor` | 文字的颜色 | | `fontWeight` | `number 或 FontWeight 或 string` | 文字的字体粗细 | - ## `HPTLoadingUtil` #### 接口 | **方法名** | **入参** | **描述** | |----------------------------------|-----------------------------------------------------------------------------------------------------|----------| | HPTLoadingUtil.show | info: LoadingInfo 显示内容
config?: LoadingConfig Loading的样式配置 | 显示一个底部弹框 | | HPTLoadingUtil.showWithComponent | component: Object 当前所属页面的this
info: LoadingInfo 显示内容
config?: LoadingConfig Loading的样式配置 | 显示一个底部弹框 | #### `LoadingInfo` 属性(描述Loading的内容) | 属性名 | 类型 | 描述 | |---------|---------------|---------------| | `title` | `ResourceStr` | 在Loading下显示文案 | #### `LoadingConfig` 属性(描述弹框的样式) | 属性名 | 类型 | 描述 | |-------------------|-------------------------------------------|------------------------------------------------------| | `maskColor` | `ResourceColor` | 底部遮罩层颜色,默认为透明。 | | `padding` | `Padding` | 内部边距,默认为 `left: 16, right: 16, top: 16, bottom: 16`。 | | `backgroundColor` | `ResourceColor` | 内容背景色,默认为透明。 | | `border` | `BorderOptions` | 内容背景样式,默认圆角为6。 | | `customLoading` | `CustomBuilder` | 支持传入自定义加载组件。 | | `loadingWidth` | `Length` | 加载图标宽度。 | | `loadingHeight` | `Length` | 加载图标高度。 | | `styleType` | `LoadingStyleType` | 加载动画类型,默认为系统样式。 | | `loadingColor` | `ResourceColor` | 加载图标颜色,仅当 `styleType` 为 `System` 时生效。 | | `offset` | `Position` | 图标下文案的偏移量。 | | `fontSize` | `number 或 string 或 Resource` | 图标下文案的字体大小。 | | `fontColor` | `ResourceColor` | 图标下文案的字体颜色。 | | `fontWeight` | `number 或 FontWeight 或 string` | 图标下文案的字体粗细。 | - ## `PopupController` | **方法名** | **入参** | **描述** | |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------|----------| | close | void | 关闭弹框 | - ## `PopupTextInputController` | **方法名** | **入参** | **描述** | |----------------|--------------------------------------------|--------| | addListener | (text?: string, errorMsg?: string) => void | 添加监听 | | removeListener | (text?: string, errorMsg?: string) => void | 关闭弹框 | | get text | void | 获取输入内容 | | set text | string? | 设置输入内容 | | get errorMsg | void | 获取错误内容 | | set errorMsg | string? | 设置错误 | # 修改全局默认配置 ```typescript 第一种设置默认配置方式: // HPTDialog HPTDialogUtil.defaultConfig.titlePadding = { bottom: 24 } HPTDialogUtil.defaultConfig.fontSize = $r("app.float.h3") HPTDialogUtil.defaultConfig.fontColor = $r("app.color.mainText") HPTDialogUtil.defaultConfig.messageFontSize = $r("app.float.b4") HPTDialogUtil.defaultConfig.messageFontColor = $r("app.color.promptText") // HPTBottomSheet HPTBottomSheetUtil.defaultConfig.itemSelectedBackgroundColor = $r("app.color.primary") // HPTLoading HPTLoadingUtil.defaultConfig.loadingColor = $r("app.color.secondary") HPTLoadingUtil.defaultConfig.styleType = LoadingStyleType.eat 第二种设置默认配置方式: HPTLoadingUtil.settingConfig((config) => { config.styleType = LoadingStyleType.search }) ``` # 使用方式 ### 1:在EntryAbility 中初始化 ``` // 获取应用主窗口 let windowClass: window.Window = windowStage.getMainWindowSync(); // 配置(获取安全区域) HPTPopup.init(windowClass) ``` ### 2:在`@Entry`中使用 `HPTPopup` 作为底层组件 ``` build() { Column() { HPTPopup() { Column() { } } } } ``` ### 2: HPTDialogUtil ```typescript HPTDialogUtil.show({ title: '是否确认退出登录?', cancel: "取消", message: "退出说明xxxxx", confirm: "确认退出", confirmOnClick: () => { // 执行退出登录逻辑 } }) ``` ### 3:HPTDialogUtil 自定义 ```typescript HPTDialogUtil.show({ title: '是否确认退出登录?', cancel: "取消", confirm: "确认退出", customMessage: () => this.buildItem("退出说明xxxxx", () => { }), confirmOnClick: () => { } }) // 显示输入 let inputController = HPTDialogUtil.showInput({ title: "请输入金额", text: "2000", placeholder: "1-1000", inputType: InputType.Number, disableClickButtonAutoClose: true, confirmOnClick: async (_) => { // inputController.text = "20" // inputController.errorMsg = "错误xxxxx" }, cancelOnClick: (_) => { inputController.close() // inputController.errorMsg = "错误xxxxx" } }) ``` ### 4:HPTBottomSheetUtil ```typescript HPTBottomSheetUtil.show({ contentList: ['代煎', '不代煎', '每次手动选择'], disableShowTitle: true }) HPTBottomSheetUtil.show({ title: '选择方式', contentInfoList: [ { 'name': '微信', 'fontColor': Color.Orange, 'fontSize': 40 }, { 'name': 'QQ', }, { 'name': '微博', 'fontColor': Color.Red } ], confirmOnClick: (index, _) => { console.log("选择" + index) }, onWillDismiss: (dismissAction) => { console.log("onWillDismiss") dismissAction.dismiss() } }, { titleFontColor: Color.Green }) HPTBottomSheetUtil.showPicker({ range: [ "中国工商银行", "中国建设银行", "中国农业银行", "中国邮政储蓄银行", "中国银行", "交通银行", "招商银行", "民生银行", "中信银行", "光大银行", "华夏银行", "兴业银行", "浦发银行", "平安银行", "杭州银行" ], selected: this.currentPickerSelected, pickerConfirmOnClick: (value, selected) => { console.log('选择银行' + value) this.currentPickerSelected = selected as number } }) ``` ### 5:HPTLoadingUtil ```typescript // 显示Loading HPTLoadingUtil.show() // 隐藏Loading HPTLoadingUtil.hide() ``` # 注意️⚠️ 1. **使用`show`方法之前,务必在`@Entry`中使用 `HPTPopup` 作为底层组件之一** 2. **如果使用`showWithComponent`方法,`component`参数是指当前的`@Component`的实例,如果传入类型错误,可能会抛出异常,导致弹框无法正常弹出** # 目录结构 ``` hptdialog ├── src │ ├── main │ │ │── ets │ │ │ └── components │ │ │ └── popup │ │ │ └── HPTBottomSheetUtil.ets │ │ │ └── HPTDialogUtil.ets │ │ │ └── HPTLoadingUtil.ets │ │ │ └── HPTToastUtil.ets │ │ │ └── Popup.ets │ │ │ └── PopupController.ets │ │ │ └── PopupInfo.ets │ │ │ └── utils │ │ │ └── CommonUtil │ │ └── resources └── ``` # 项目地址 [仓库地址](https://gitee.com/iJianbao/gancao-hptdialog.git)