Compose UI 之 Segmented buttons 分段按钮

本文介绍了Android Compose UI中的Segmented buttons,包括单选和多选两种类型。分段式按钮用于在一组相关选项中进行选择,通常在水平方向布局。文中详细阐述了单选和多选分段按钮的使用场景、实现方式及其在Compose UI库中的实现,对比了两者在复杂性和交互体验上的区别,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Segmented buttons

SegmentedButton 是一种分段式按钮组件,它允许用户在一组相关的选项中选择一个或几个。

在这里插入图片描述

上图中:① 单选的分段式按钮。② 多选的分段式按钮。

分段式按钮的几个特点:

  • 分段式按钮是带有状态的按钮,又有单选和多选之分。

  • 从设计上将,不论是单选或是多选的分段式按钮,都是在一个水平方向上布局,因为 Compose UI 库中都是继承自 RowScope 的实现。

  • 实现使用的数量是有限的,它实现了 2 ~ 5 个简单的选择按钮,要实现更多更复杂的选择,(官方)建议使用 chips 组件(后续文章会讨论)。

一个经典的 SegmentedButton 由 3 个部分组成,分别是:container 容器,icon 图标,text 文本。

在这里插入图片描述

单选 SegmentedButton

单选的分段式按钮允许在用户在多个互斥的选项中选择一个。它有助于在同一个页面中操作切换界面,选择 View等操作。

它的使用场景也比较多:

  • 显示模式切换:类似购物 app 中 item 是网格显示方式还是列表方式显示。可以使用 单选 SegmentedButton
  • 排序方式选择:选择一个排序方式对众多的 item 进行排序。
  • 筛选条件:作为单选,将单选 SegmentedButton 作为单个筛选条件也比较合适。

除上面的场景之外,只要是单个选择的场景中,均可以考虑使用单选分段式按钮。

下面是分段式按钮的声明:

@Composable
@ExperimentalMaterial3Api
fun SingleChoiceSegmentedButtonRowScope.SegmentedButton(
    selected: Boolean,
    onClick: () -> Unit,
    shape: Shape,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: SegmentedButtonColors = SegmentedButtonDefaults.colors(),
    border: BorderStroke = SegmentedButtonDefaults.borderStroke(
        colors.borderColor(enabled, selected)
    ),
    interactionSource: MutableInteractionSource? = null,
    icon: @Composable () -> Unit = {
   
    SegmentedButtonDefaults.Icon(selected) },
    label: @Composable () -> Unit
): Unit
参数 类型 描述
selected Boolean 表示这个按钮是否被选中。如果为 true,则按钮会显示为选中状态;如果为 false,则按钮会显示为非选中状态。
onClick () -> Unit 当按钮被点击时执行的回调函数。通常用于改变按钮的选中状态或触发其他相关的操作。
shape Shape 定义按钮的形状。可以是任何实现了 Shape 接口的对象,如 RoundedCornerShapeCutCornerShape 等。
modifier Modifier 用于修改按钮的布局和绘制的Modifier。例如,可以设置大小、边距、背景等。
enabled Boolean 表示按钮是否可用。如果为false,则按钮将不会响应用户的输入,并可能显示为禁用状态。
colors SegmentedButtonColors 定义按钮的颜色方案。可以是一个实现了 SegmentedButtonColors 接口的对象,该接口提供了用于不同状态和部分的颜色值。
border BorderStroke 定义按钮的边框样式。可以是一个 BorderStroke 对象,它指定了边框的颜色、宽度和样式等。
interactionSource MutableInteractionSource? 用于处理按钮的交互状态(如按下、聚焦等)的 MutableInteractionSource 对象。如果不提供,则按钮将不会有交互反馈。
icon @Composable () -> Unit 一个用于显示按钮图标的 @Composable 函数。如果不提供自定义的图标,则会使用默认的图标实现。
label @Composable () -> Unit 一个用于显示按钮标签的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虚妄皆空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值