news 2026/10/30 2:56:17

Android Jetpack Compose - 进度指示器、SegmentedButton、Chip

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - 进度指示器、SegmentedButton、Chip

一、进度指示器

1、基本介绍
  1. 进度指示器可以分为 2 种类型
类型说明
确定型准确显示已完成的进度
不确定型持续动画显示,不考虑进度
  1. 进度指示器可以采用 2 种形式
类型说明
线性从左向右填充的水平条
圆形笔画长度不断增加,直到覆盖整个圆周的圆
2、基本使用
varcurrentProgressbyremember{mutableFloatStateOf(0f)}varloadingbyremember{mutableStateOf(false)}valscope=rememberCoroutineScope()Column(verticalArrangement=Arrangement.spacedBy(12.dp),horizontalAlignment=Alignment.CenterHorizontally,modifier=Modifier.fillMaxWidth().padding(12.dp)){Button(onClick={scope.launch{loading=truefor(iin0..100){delay(100)currentProgress=i.toFloat()/100}loading=false}},enabled=!loading){Text("开始加载")}if(loading){LinearProgressIndicator(progress={currentProgress},modifier=Modifier.fillMaxWidth(),)}}
varcurrentProgressbyremember{mutableFloatStateOf(0f)}varloadingbyremember{mutableStateOf(false)}valscope=rememberCoroutineScope()Column(verticalArrangement=Arrangement.spacedBy(12.dp),horizontalAlignment=Alignment.CenterHorizontally,modifier=Modifier.fillMaxWidth().padding(12.dp)){Button(onClick={scope.launch{loading=truefor(iin0..100){delay(100)currentProgress=i.toFloat()/100}loading=false}},enabled=!loading){Text("开始加载")}if(loading){CircularProgressIndicator(progress={currentProgress},)}}
3、不确定型进度指示器
  1. 不确定型通过动画向用户指示正在进行处理,但不会指定任何完成程度

  2. LinearProgressIndicator 或 CircularProgressIndicator 都可以创建为不确定指示器,但不传入 progress 参数

varloadingbyremember{mutableStateOf(false)}valscope=rememberCoroutineScope()Column(verticalArrangement=Arrangement.spacedBy(12.dp),horizontalAlignment=Alignment.CenterHorizontally,modifier=Modifier.fillMaxWidth().padding(12.dp)){Button(onClick={scope.launch{loading=truefor(iin0..100){delay(100)}loading=false}},enabled=!loading){Text("开始加载")}if(loading){LinearProgressIndicator(modifier=Modifier.fillMaxWidth(),)}}
varloadingbyremember{mutableStateOf(false)}valscope=rememberCoroutineScope()Column(verticalArrangement=Arrangement.spacedBy(12.dp),horizontalAlignment=Alignment.CenterHorizontally,modifier=Modifier.fillMaxWidth().padding(12.dp)){Button(onClick={scope.launch{loading=truefor(iin0..100){delay(100)}loading=false}},enabled=!loading){Text("开始加载")}if(loading){CircularProgressIndicator()}}

二、SegmentedButton

1、基本介绍
  • SegmentedButton,即分段按钮,它可让用户从一组并排显示的选项中进行选择, SegmentedButton 有 2 种类型
  1. 单选按钮:可让用户选择一个选项

  2. 多选按钮:可让用户选择 2 到 5 个选项,对于更复杂的选择或超过 5 个选项,可以使用使用 Chip

2、演示
varselectedIndexbyremember{mutableIntStateOf(0)}valoptions=listOf("Day","Month","Week")Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center,){SingleChoiceSegmentedButtonRow{options.forEachIndexed{index,label->SegmentedButton(shape=SegmentedButtonDefaults.itemShape(index=index,count=options.size),selected=(selectedIndex==index),onClick={selectedIndex=index},label={Text(label)})}}}
valselectedOptions=remember{mutableStateListOf(false,false,false)}valoptions=listOf("Mail Outline","Call","Date Range")Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center,){MultiChoiceSegmentedButtonRow{options.forEachIndexed{index,label->SegmentedButton(shape=SegmentedButtonDefaults.itemShape(index=index,count=options.size),checked=selectedOptions[index],onCheckedChange={selectedOptions[index]=it},label={when(label){"Mail Outline"->Icon(imageVector=Icons.Default.MailOutline,contentDescription="Mail Outline")"Call"->Icon(imageVector=Icons.Default.Call,contentDescription="Call")"Date Range"->Icon(imageVector=Icons.Default.DateRange,contentDescription="Date Range")}})}}}

三、Chip

1、基本介绍
  • Chip 是一种小型交互组件,它提供了快速、高效的交互方式,例如,操作、筛选等,Chip 有如下 4 种类型
类型说明
AssistChip辅助型 Chip,用于触发操作,带图标的操作
FilterChip筛选型 Chip,用于筛选选项,可选中 / 取消
InputChip输入型 Chip,用于实体输入,可删除的实体
SuggestionChip建议型 Chip,用于内容建议,轻量级建议
2、演示
valcontext=LocalContext.currentBox(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){AssistChip(onClick={Toast.makeText(context,"Click Assist Chip",Toast.LENGTH_SHORT).show()},label={Text("Assist Chip")},leadingIcon={Icon(Icons.Filled.Settings,contentDescription="Icon Settings",Modifier.size(AssistChipDefaults.IconSize))})}
varselectedbyremember{mutableStateOf(false)}Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){FilterChip(onClick={selected=!selected},label={Text("Filter Chip")},selected=selected,leadingIcon=if(selected){{Icon(imageVector=Icons.Filled.Done,contentDescription="Done",modifier=Modifier.size(FilterChipDefaults.IconSize))}}else{null},)}
varenabledbyremember{mutableStateOf(true)}if(!enabled)returnBox(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){InputChip(onClick={enabled=!enabled},label={Text("Input Chip")},selected=enabled,avatar={Icon(Icons.Filled.Person,contentDescription="Localized description",Modifier.size(InputChipDefaults.AvatarSize))},trailingIcon={Icon(Icons.Default.Close,contentDescription="Localized description",Modifier.size(InputChipDefaults.AvatarSize))},)}
valcontext=LocalContext.currentBox(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){SuggestionChip(onClick={Toast.makeText(context,"Click Suggestion Chip",Toast.LENGTH_SHORT).show()},label={Text("Suggestion Chip")})}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/30 8:53:34

AI产品经理破局之道:5大提问框架,让业务经验变AI燃料,建议收藏

AI产品经理常陷入业务与技术间的沟通困境,核心问题是业务拥有隐性知识,而AI需要显性规则。突破之道在于角色转变:从接需求到主动挖矿,从推销方案到定义问题,从交付功能到交付认知,从会议室专家到一线学徒。…

作者头像 李华
网站建设 2026/10/31 1:00:59

企业如何选择高效能的会员管理系统?

在当下的商业情形里,会员管理从单纯日常的客户信息记录,转变来成为企业数字化运作的关键部分。一个具备高效能的会员管理系统能够集合多渠道会员数据,达成精准营销、提高客户忠诚度,并且对业务增长带来直接推动作用。面对市面上诸…

作者头像 李华
网站建设 2026/10/27 8:50:23

基于深度学习YOLOv12的密集行人识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文设计并实现了一种基于YOLOv12深度学习模型的密集行人识别检测系统,结合YOLO数据集与用户友好的UI界面,构建了一套完整的行人检测解决方案。系统采用Python开发,包含登录注册功能,并基于YOLOv12算法优化了密集场…

作者头像 李华
网站建设 2026/10/25 16:31:23

每天给AI写10000字小作文后,我学到了什么

番外篇:每天给AI写10000字小作文后,我学到了什么 哈喽,我是黑棠。 过去一段时间,我做了个“看起来很离谱”的练习:每天给不同模型(Claude Sonnet 4.5、Claude Opus 4.5、Gemini-3-Pro、GPT-5.2&#xff0…

作者头像 李华
网站建设 2026/10/29 1:33:39

HTTP与HTTPS的区别:不只是多了一个S那么简单

在日常开发和上网过程中,我们总能看到浏览器地址栏里的 http:// 和 https://,多数人会下意识认为两者的差异只是多了一个“S”——代表“Secure”(安全)。但实际上,这个“S”背后是一套完整的加密体系、信任机制和传输…

作者头像 李华
网站建设 2026/10/30 2:32:01

声画合一 智控全场 —— 高清数字会议系统重构现代会议新生态

一套高清数字会议系统已在四川崇州市政府完成部署并投入使用,该系统核心设备包括高清混合矩阵、会议中控系统、电源控制系统、高清画面分割器等,运行期间表现出稳定的性能,功能覆盖全面且操作便捷,设备兼容性强,能够充…

作者头像 李华