跳转到内容

LoadingDialog

LoadingDialog 是一个始终居中的小卡片加载对话框, 包含旋转加载指示器与可选文字, 对应 ColorOS 的旋转进度对话框 (COUIRotatingDialogBuilder / coui_progress_dialog_rotating.xml): 152dp 宽、9dp 圆角的卡片, 26dp 加载指示器与 14sp 文字。

提供两种形态:

  • OverlayLoadingDialog — 渲染在 ScaffoldCOUIPopupHost 中 (必须在 Scaffold 内使用)。
  • WindowLoadingDialog — 渲染在窗口层级, 无需 Scaffold

前提条件

OverlayLoadingDialog 依赖 Scaffold 提供的 COUIPopupHost 渲染弹窗内容。没有 Scaffold 时请使用 WindowLoadingDialog

引入

kotlin
import io.github.suqi8.coui.kmp.overlay.OverlayLoadingDialog
// or
import io.github.suqi8.coui.kmp.window.WindowLoadingDialog

import io.github.suqi8.coui.kmp.layout.LoadingDialogDefaults

基本用法

kotlin
var showLoading by remember { mutableStateOf(false) }

Scaffold {
    TextButton(
        text = "开始加载",
        onClick = { showLoading = true }
    )

    OverlayLoadingDialog(
        show = showLoading,
        text = "加载中..."
    )

    // Hide the dialog when the task completes
    LaunchedEffect(showLoading) {
        if (showLoading) {
            doWork()
            showLoading = false
        }
    }
}

不传文字时, 加载指示器直接居中于卡片:

kotlin
OverlayLoadingDialog(show = showLoading)

WindowLoadingDialog 用法相同, 但渲染在平台窗口层级, 无需 Scaffold:

kotlin
var showLoading by remember { mutableStateOf(false) }

WindowLoadingDialog(
    show = showLoading,
    text = "加载中..."
)

用户关闭

默认情况下用户无法关闭对话框, 对应不可取消的 COUI 进度对话框。传入 onDismissRequest 后, 点击外部或按返回键可关闭:

kotlin
OverlayLoadingDialog(
    show = showLoading,
    text = "加载中...",
    onDismissRequest = { showLoading = false }
)

属性

OverlayLoadingDialog 属性

属性名类型说明默认值必需
showBoolean是否显示对话框-
modifierModifier应用于对话框的修饰符Modifier
textString?加载指示器下方的文字null
textColorColor文字颜色LoadingDialogDefaults.textColor()
spinnerColorColor加载指示器颜色LoadingDialogDefaults.spinnerColor()
backgroundColorColor卡片背景色DialogDefaults.backgroundColor()
enableWindowDimBoolean是否启用背景遮罩true
onDismissRequest(() -> Unit)?用户点击外部或按返回键时回调; 为 null 时用户无法关闭null
onDismissFinished(() -> Unit)?隐藏动画完成后回调null
renderInRootScaffoldBoolean是否渲染在根 (最外层) Scaffold 中。为 true 时对话框覆盖全屏, 为 false 时在当前 Scaffold 的范围内渲染true

WindowLoadingDialog 属性

OverlayLoadingDialog 相同, 但没有 renderInRootScaffold (对话框始终渲染在窗口层级):

属性名类型说明默认值必需
showBoolean是否显示对话框-
modifierModifier应用于对话框的修饰符Modifier
textString?加载指示器下方的文字null
textColorColor文字颜色LoadingDialogDefaults.textColor()
spinnerColorColor加载指示器颜色LoadingDialogDefaults.spinnerColor()
backgroundColorColor卡片背景色DialogDefaults.backgroundColor()
enableWindowDimBoolean是否启用背景遮罩true
onDismissRequest(() -> Unit)?用户点击外部或按返回键时回调; 为 null 时用户无法关闭null
onDismissFinished(() -> Unit)?隐藏动画完成后回调null

LoadingDialogDefaults 对象

属性

属性名类型说明
CardWidthDp卡片宽度, COUI coui_spinner_layout_width (152.dp)
CardMinHeightDp卡片最小高度, COUI coui_spinner_layout_min_height (120.dp)
CornerRadiusDp卡片圆角, COUI couiRoundCornerMRadius (9.dp)
SpinnerSizeDp加载指示器直径, COUI coui_spinner_loading_anim_width (26.dp)

函数

函数名返回类型说明
textColor()Color默认文字颜色 (主标签色)
spinnerColor()Color默认加载指示器颜色 (主标签色)

变更日志

基于 Apache-2.0 许可发布