跳转到内容

ButtonPreference

ButtonPreference 是行尾内嵌小按钮的偏好设置行,对应 ColorOS 的 COUIButtonPreference。按钮遵循 COUI 小按钮样式(couiSmallButtonColorStyleWidget.COUI.Button.Small):最小 52×28dp 的胶囊,主题强调色填充,14sp 中等字重标签。按钮点击与整行点击相互独立。

引入

kotlin
import io.github.suqi8.coui.kmp.preference.ButtonPreference
import io.github.suqi8.coui.kmp.preference.ButtonPreferenceDefaults

基本用法

kotlin
ButtonPreference(
    title = "账号",
    summary = "登录以同步数据",
    buttonText = "登录",
    onButtonClick = { /* 处理按钮点击 */ }
)

行可点击

行点击(onClick)与按钮点击(onButtonClick)互不影响:

kotlin
ButtonPreference(
    title = "存储空间",
    summary = "已使用 12.3 GB",
    buttonText = "清理",
    onButtonClick = { /* 清理 */ },
    onClick = { /* 打开存储详情 */ }
)

组件状态

禁用状态

禁用组件会同时禁用整行与内嵌按钮:

kotlin
ButtonPreference(
    title = "禁用行",
    summary = "按钮与整行均被禁用",
    buttonText = "操作",
    onButtonClick = {},
    enabled = false
)

按下状态

ButtonPreference 支持通过 holdDownState 参数控制整行的按下状态,通常用于显示弹出对话框时的视觉反馈:

kotlin
var showDialog by remember { mutableStateOf(false) }

Scaffold {
    ButtonPreference(
        title = "账号",
        summary = "管理账号详情",
        buttonText = "登录",
        onButtonClick = { /* 登录 */ },
        onClick = { showDialog = true },
        holdDownState = showDialog
    )
    OverlayDialog(
        title = "账号详情",
        show = showDialog,
        onDismissRequest = { showDialog = false } // 关闭对话框
    ) {
        // 对话框内容
    }
}

属性

ButtonPreference 属性

属性名类型说明默认值是否必须
titleString设置项标题-
buttonTextString内嵌按钮的文字-
onButtonClick() -> Unit点击内嵌按钮时的回调-
modifierModifier应用于组件的修饰符Modifier
titleColorBasicComponentColors标题文本的颜色配置BasicComponentDefaults.titleColor()
summaryString?设置项摘要null
summaryColorBasicComponentColors摘要文本的颜色配置BasicComponentDefaults.summaryColor()
startAction@Composable (() -> Unit)?左侧显示的自定义内容null
endActions@Composable RowScope.() -> Unit右侧显示的自定义内容(按钮前){}
bottomAction@Composable (() -> Unit)?底部显示的自定义内容null
buttonColorsButtonColors内嵌按钮的颜色配置ButtonPreferenceDefaults.buttonColors()
buttonMinWidthDp内嵌按钮的最小宽度ButtonPreferenceDefaults.ButtonMinWidth
buttonMinHeightDp内嵌按钮的最小高度ButtonPreferenceDefaults.ButtonMinHeight
buttonCornerRadiusDp内嵌按钮的圆角半径ButtonPreferenceDefaults.ButtonCornerRadius
buttonInsideMarginPaddingValues内嵌按钮的内边距ButtonPreferenceDefaults.ButtonInsideMargin
insideMarginPaddingValues组件内部内容的边距BasicComponentDefaults.InsideMargin
cardListPositionCardListPosition该行在卡片组中的位置,圆角外边缘会获得额外内边距CardListPosition.None
onClick(() -> Unit)?点击整行(非按钮)时的回调null
holdDownStateBoolean组件是否处于按下状态false
enabledBoolean组件是否可交互true

ButtonPreferenceDefaults 对象

常量类型默认值说明
ButtonMinWidthDp52.dpCOUI coui_btn_small_width_min
ButtonMinHeightDp28.dpCOUI coui_btn_small_height_min
ButtonCornerRadiusDp14.dp胶囊圆角(COUI drawableRadius -1 = 高度 / 2)
ButtonInsideMarginPaddingValuesPaddingValues(horizontal = 12.dp, vertical = 4.dp)Widget.COUI.Button.Small 内边距

buttonColors() 工厂方法

参数类型默认值
colorColorCOUITheme.colorScheme.primary
disabledColorColorCOUITheme.colorScheme.disabledPrimaryButton
contentColorColorCOUITheme.colorScheme.onPrimary
disabledContentColorColorCOUITheme.colorScheme.disabledOnPrimaryButton

进阶用法

自定义按钮颜色

kotlin
ButtonPreference(
    title = "移除设备",
    buttonText = "移除",
    onButtonClick = { /* 移除 */ },
    buttonColors = ButtonPreferenceDefaults.buttonColors(
        color = COUITheme.colorScheme.error,
        contentColor = COUITheme.colorScheme.onError
    )
)

带右侧额外内容

传入 endActions 的内容会显示在内嵌按钮之前:

kotlin
ButtonPreference(
    title = "会员",
    summary = "当前套餐",
    buttonText = "升级",
    onButtonClick = { /* 升级 */ },
    endActions = {
        Text(
            text = "免费版",
            color = COUITheme.colorScheme.onSurfaceVariantActions
        )
    }
)

带左侧图标

kotlin
ButtonPreference(
    title = "蓝牙设备",
    summary = "已配对",
    buttonText = "连接",
    onButtonClick = { /* 连接 */ },
    startAction = {
        Icon(
            imageVector = COUIIcons.Sort,
            contentDescription = null,
            tint = COUITheme.colorScheme.onBackground,
            modifier = Modifier.padding(end = 12.dp)
        )
    }
)

变更日志

基于 Apache-2.0 许可发布