跳到正文

HyperDialog

  • 包名:hyper_ui
  • 源码:library/src/main/java/hyper_ui/components/dialog/HyperDialog.kt
  • 状态归属:调用方提供 show、内容状态和提交结果
  • Preview ID:custom_dialog

无预设正文结构的弹窗容器。内容和底部操作分别通过 ColumnScopeRowScope slot 提供。

公开签名

kotlin
@Composable
fun HyperDialog(
    show: Boolean,
    onDismissRequest: () -> Unit,
    modifier: Modifier = Modifier,
    minWidth: Dp = HyperDialogDefaults.MinWidth,
    maxWidth: Dp = HyperDialogDefaults.MaxWidth,
    maxHeight: Dp = HyperDialogDefaults.MaxHeight,
    shape: Shape = HyperDialogDefaults.Shape,
    elevation: Dp = HyperDialogDefaults.Elevation,
    containerColor: Color = Color.Unspecified,
    contentPadding: PaddingValues = HyperDialogDefaults.ContentPadding,
    horizontalAlignment: Alignment.Horizontal = Alignment.Start,
    verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(HyperDialogDefaults.ContentSpacing),
    actionsArrangement: Arrangement.Horizontal = Arrangement.spacedBy(
        HyperDialogDefaults.ActionSpacing,
        Alignment.End
    ),
    showScrollIndicator: Boolean = HyperDialogDefaults.ShowScrollIndicator,
    actions: (@Composable RowScope.() -> Unit)? = null,
    content: @Composable ColumnScope.() -> Unit
)

关键参数

参数默认值说明
show必填是否显示;关闭动画结束后移除 Popup
onDismissRequest必填返回键等 Popup 关闭请求
minWidth / maxWidth280.dp / 340.dp面板宽度约束
maxHeight480.dp面板最大高度
elevation8.dp面板阴影高度
containerColorColor.Unspecified未指定时使用 HyperColors.cardContainer
contentPadding水平 24.dp、垂直 22.dp面板内边距
showScrollIndicatortrue内容溢出时是否显示内部滚动指示条
actionsnull固定在可滚动内容下方的操作区
content必填可滚动内容区

最小用法

kotlin
HyperDialog(
    show = showDialog,
    onDismissRequest = { showDialog = false },
    actions = {
        HyperButton(
            text = "取消",
            variant = HyperButtonVariant.Default,
            onClick = { showDialog = false }
        )
        HyperButton(
            text = "保存",
            onClick = {
                onSave(draft)
                showDialog = false
            }
        )
    }
) {
    HyperTextField(
        value = draft,
        onValueChange = { draft = it },
        singleLine = false
    )
}

默认值 API

kotlin
object HyperDialogDefaults {
    val MinWidth = 280.dp
    val MaxWidth = 340.dp
    val MaxHeight = 480.dp
    val Shape: Shape = RoundedCornerShape(HyperStyleDefaults.LargeCornerRadius)
    val Elevation = 8.dp
    val ContentPadding = PaddingValues(horizontal = 24.dp, vertical = 22.dp)
    val ContentSpacing = 16.dp
    val ActionSpacing = 12.dp
    const val ShowScrollIndicator = true
    val ScrollIndicatorWidth = 3.dp
    val ScrollIndicatorContentPadding = 10.dp
    val ScrollIndicatorMinHeight = 32.dp
}

行为与约束

  • 弹窗居中显示,使用 300ms 淡入/缩放动画。
  • Popup 不因点击外部关闭,并且不渲染 scrim/overlay。
  • onDismissRequest 不会自动把 show 改为 false,调用方必须更新状态。
  • 长内容在内容区滚动;操作按钮应放入 actions,避免随正文滚动。
  • 内容使用 DisableSelection 隔离外部选择容器,可放输入框。

交互预览

HyperDialog 交互预览 在新窗口打开