Compose UI 之 Checkbox 复选框 & RadioButton 单选框

本文介绍了Android Compose UI中的Checkbox复选框和RadioButton单选框。Checkbox适用于多选,RadioButton用于单选,两者都具有高度可定制性,能够适应不同布局和屏幕尺寸,为用户提供直观的交互体验。

Checkbox 复选框 & RadioButton 单选框

Checkbox 复选框提供了在多个选项中选择一个或多个选项的作用。

RadioButton 单选框提供了在多个选项中只能选择一个选项的作用。

下面就分别来介绍下 Android Compose UI 库中的 Checkbox 复选框 和 RadioButton 单选框。

RadioButton

RadioButton 是一个用于在用户界面中创建单选按钮的组件。单选按钮通常用于在多个选项中选择一个,与其他单选按钮组合使用时,它们表现为互斥的:用户只能选择其中的一个。

RadioButton 组件非常灵活,可以轻松地与各种布局和修饰符结合使用,以实现所需的用户界面设计。它允许开发者通过参数自定义其外观和行为,如选中状态、颜色、大小等。

与传统的 Android View 系统相比,Compose 中的 RadioButton 提供了更简洁、声明式的方式来创建和维护用户界面。它适用于各种屏幕大小和分辨率,可以轻松地适应不同的设备和配置。

下面是 RadioButton 的声明

@Composable
fun RadioButton(
    selected: Boolean,
    onClick: (() -> Unit)?,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: RadioButtonColors = RadioButtonDefaults.colors(),
    interactionSource: MutableInteractionSource? = null
): Unit
参数类型描述
selectedBoolean它是一个布尔值 (Boolean),用于指示单选按钮当前是否被选中。如果 selectedtrue,则单选按钮会被绘制为选中状态;如果为 false,则为未选中状态。
onClick(() -> Unit)?它是一个可选的 Lambda 表达式((() -> Unit)?),当用户点击单选按钮时会被调用。你可以在这个 Lambda 表达式中编写当用户点击单选按钮时应执行的代码。
modifierModifier它是一个 Modifier 类型的参数,用于修改或增强单选按钮的布局或行为。Modifier 是 Compose 中一个非常核心的概念,用于处理布局调整、大小、位置、绘制层等各种属性。
enabledBoolean它是一个布尔值 (Boolean),用于指示单选按钮是否可以被用户交互。如果 enabledtrue,则单选按钮可以被点击和选中;如果为 false,则单选按钮将显示为禁用状态,无法响应用户的交互。
colorsRadioButtonColors它是一个 RadioButtonColors 类型的参数,用于定义单选按钮的不同颜色属性,比如选中状态的颜色、未选中状态的颜色等。通过传递自定义的 RadioButtonColors 对象,你可以很容易地自定义单选按钮的视觉样式。
interactionSourceMutableInteractionSource?它是一个可选的 MutableInteractionSource? 类型的参数,用于处理单选按钮的交互状态(如被按下、获得焦点等)。这个参数通常用于与可访问性服务(如屏幕阅读器)交互,以及实现更复杂的交互效果。如果你不需要处理这些交互状态,可以忽略这个参数。

下面通过示例来说明它的使用。

示例如下,修饰符 selectableGroup() 将若干个 RadioButton 归为一组,并确保正确的可达性。

@Composable
fun RadioButtonDemo() {
    val radioOptions = listOf("男", "女")
    val (selectedOption, onOptionSelected) = remember { mutableStateOf(radioOptions[0]) }
    Column(modifier=Modifier.fillMaxSize().selectableGroup()) {
        radioOptions.forEach { text ->
            Row(modifier = Modifier.fillMaxWidth().height(56.dp)
                    .selectable(selected = (text == selectedOption), onClick = { onOptionSelected(text) }, role = Role.RadioButton)
                    .padding(horizontal = 16.dp),
                verticalAlignment = Alignment.CenterVertically
            ) {
                RadioButton(selected = (text == selectedOption), onClick = null)
                Text(text = text, style = MaterialTheme.typography.bodyLarge, modifier = Modifier.padding(start = 16.dp))
            }
        }
    }
}

Compose-gif_RadioButton_demo.gif

Compose UI 中的 RadioButton 是一种用于创建单选按钮的组件,它允许用户在多个选项中选择一个。它具有高度的可定制性,开发者可以通过参数设置其外观和行为,如选中状态、颜色等。RadioButton 组件易于与其他 Compose UI 元素集成,可以灵活地适应不同的布局和屏幕尺寸,为用户提供直观且友好的单选交互体验。

Checkbox

Checkbox 用于多选或者打开/关闭某项设置。Compose 中的 Checkbox 与 View 系统中的 Checkbox 最直接的不同,View 系统中的 Checkbox 可以设置文本信息及与文本相关的各种属性值,因为在继承关系中它最后继承自 TextView ,而 Compose 中的 Checkbox 只是一个复选框,不包含文本部分,这样更单纯,更注重状态的变化。

Checkbox 的声明如下

@Composable
fun Checkbox(
    checked: Boolean,
    onCheckedChange: ((Boolean) -> Unit)?,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: CheckboxColors = CheckboxDefaults.colors(),
    interactionSource: MutableInteractionSource? = null
): Unit
参数类型说明
checkedBoolean这个参数表示复选框的当前状态,即是否被选中。true 表示复选框被选中,false 表示未被选中。
onCheckedChange((Boolean) -> Unit)?这是一个可选的 lambda 函数,当复选框的状态发生变化时会被调用。它接收一个 Boolean 类型的参数,表示复选框的新状态。
modifierModifier它用于修改或装饰可组合函数的行为。这里,它有一个默认值 Modifier,意味着如果不提供任何修饰符,复选框将使用默认的修饰符。
enabledBoolean这个参数表示复选框是否可以被用户交互。默认值为 true,意味着复选框默认是启用的。如果设置为 false,复选框将显示为禁用状态,并且不会响应用户的交互。
colorsCheckboxColors这个参数允许你自定义复选框的颜色。CheckboxColors 是一个包含不同颜色属性的对象,用于定义复选框在不同状态下的颜色。默认值是 CheckboxDefaults.colors(),它提供了一套默认的颜色方案。
interactionSourceMutableInteractionSource?这是一个可选的参数,用于处理复选框的交互状态,如按下、聚焦等。MutableInteractionSource 是一个可以观察和修改交互状态的对象。如果不提供这个参数,复选框将使用默认的交互源。

Checkbox 通常用于以下场景:

  • 设置页中打开/关闭一个功能。例如,一个应用提供一个 Checkbox,让用户选择是否接收推送通知。
  • 表单输入。例如,一个问卷调查应用用多个 Checkbox 来让用户选择他们的兴趣爱好。
  • 列表选项。例如,一个购物应用显示一个商品列表,每个商品旁边都有一个 Checkbox,允许用户选择他们想要购买的商品。
  • 筛选。例如,一个音乐应用,在歌曲过滤列表中,可以选择多个过滤条件来筛选出想要的音乐。

下面是 Checkbox 的使用示例。

  1. 配合状态的 Checkbox

    @Composable
    fun CheckboxSample() {
        val (checkedState, onStateChange) = remember { mutableStateOf(true) }
        Row(
            modifier = Modifier.fillMaxWidth().height(60.dp)
                .toggleable(value = checkedState, onValueChange = { onStateChange(!checkedState) }, role = Role.Checkbox)
                .padding(horizontal = 16.dp),
            verticalAlignment = Alignment.CenterVertically
        ) {
            Checkbox(checked = checkedState, onCheckedChange = null)
            Text(text=if (checkedState) "打开" else "关闭",style = MaterialTheme.typography.bodyLarge,modifier=Modifier.padding(start=16.dp))
        }
    }
    

    Compose-gif_Checkbox_demo.gif

  2. 列表中的 Checkbox

    @Composable
    fun CheckboxListSample() {
        val checklistItems = remember {
            // 记录状态列表
            mutableStateListOf(
                ChecklistItem("Item 1"),
                ChecklistItem("Item 2"),
                ChecklistItem(title = "Item 3", isChecked = true),
            )
        }
        LazyColumn {
            // 依据 item 数量添加 composable 组件。
            items(checklistItems.size) { index ->
                // 一个 item 的的组件
                Row(
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(PaddingValues(horizontal = 10.dp, vertical = 5.dp)),
                    verticalAlignment = Alignment.CenterVertically
                ) {
                    // 开始的 Checkbox 组件。
                    Checkbox(
                        checked = checklistItems[index].isChecked,
                        onCheckedChange = { isChecked ->
                            checklistItems[index] = checklistItems[index].copy(isChecked = isChecked)
                        }
                    )
                    // 接着一个 Text 组件。
                    Text(text = checklistItems[index].title, fontSize = 16.0.sp, fontWeight = FontWeight.Bold)
    
                }
            }
        }
    }
    

    Compose-gif_Checkbox_sample.gif

Checkbox 组件是一个可复用的 UI 元素,它允许用户在多个选项中选择一个或多个。 Checkbox 通常与文本一起显示,以描述选项的内容。在Compose 中,Checkbox 可以轻松地与其他组件组合和定制,以创建丰富和动态的用户界面。通过使用 Checkbox,开发者可以提供直观且易于使用的选择机制,增强应用程序的用户体验。

总结

CheckboxRadioButton 都是用于用户交互的常用组件,但它们的功能和用途有所不同。
Checkbox 是一个可以勾选或取消勾选的复选框,用户可以选择多个选项。它通常用于表示一系列可选项目,用户可以根据自己的需要选择任意数量的选项。在 Android Compose 的视觉呈现上,Checkbox 可能具有特定的样式和动画效果,以符合 Material Design 或其他设计规范。

RadioButton 则是一个单选按钮,它表示一组互斥的选项。在一组 RadioButton 中,用户只能选择其中一个选项,一旦选中某个按钮,其他按钮会自动取消选中状态。RadioButton 在视觉呈现上通常以圆形表示,并且通常放在 RadioGroup 中使用,以体现其“单选”的特性。

Checkbox 允许用户选择多个选项,而 RadioButton 则用于在互斥的选项中进行单一选择。它们在 Android Compose 用户界面中提供了不同的交互方式和视觉表现,开发者可以根据具体需求选择合适的组件来实现所需的功能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zen@sz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值