news 2026/4/5 17:28:07

Android Jetpack Compose - Alignment、Arrangement、Carousel、Checkbox、TriStateCheckbox

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android Jetpack Compose - Alignment、Arrangement、Carousel、Checkbox、TriStateCheckbox

一、Alignment

  • Alignment 用于控制子元素对齐方式
@StablefuninterfaceAlignment{...companionobject{// 2D Alignments.@StablevalTopStart:Alignment=BiasAlignment(-1f,-1f)@StablevalTopCenter:Alignment=BiasAlignment(0f,-1f)@StablevalTopEnd:Alignment=BiasAlignment(1f,-1f)@StablevalCenterStart:Alignment=BiasAlignment(-1f,0f)@StablevalCenter:Alignment=BiasAlignment(0f,0f)@StablevalCenterEnd:Alignment=BiasAlignment(1f,0f)@StablevalBottomStart:Alignment=BiasAlignment(-1f,1f)@StablevalBottomCenter:Alignment=BiasAlignment(0f,1f)@StablevalBottomEnd:Alignment=BiasAlignment(1f,1f)// 1D Alignment.Verticals.@StablevalTop:Vertical=BiasAlignment.Vertical(-1f)@StablevalCenterVertically:Vertical=BiasAlignment.Vertical(0f)@StablevalBottom:Vertical=BiasAlignment.Vertical(1f)// 1D Alignment.Horizontals.@StablevalStart:Horizontal=BiasAlignment.Horizontal(-1f)@StablevalCenterHorizontally:Horizontal=BiasAlignment.Horizontal(0f)@StablevalEnd:Horizontal=BiasAlignment.Horizontal(1f)}}
  1. TopStart、TopCenter、TopEnd、CenterStart、Center、CenterEnd、BottomStart、BottomCenter、BottomEnd:Box 的 contentAlignment 使用,或者,其子元素的 align 使用
Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center,){Text("test content")}
Box(modifier=Modifier.fillMaxSize()){Text(text="content1",modifier=Modifier.align(Alignment.TopStart))Text(text="content2",modifier=Modifier.align(Alignment.TopCenter))Text(text="content3",modifier=Modifier.align(Alignment.TopEnd))Text(text="content4",modifier=Modifier.align(Alignment.CenterStart))Text(text="content5",modifier=Modifier.align(Alignment.Center))Text(text="content6",modifier=Modifier.align(Alignment.CenterEnd))Text(text="content7",modifier=Modifier.align(Alignment.BottomStart))Text(text="content8",modifier=Modifier.align(Alignment.BottomCenter))Text(text="content9",modifier=Modifier.align(Alignment.BottomEnd))}
  1. Top、CenterVertically、Bottom:Row 的 verticalAlignment 使用
Row(modifier=Modifier.fillMaxSize().background(Color.LightGray).padding(16.dp),horizontalArrangement=Arrangement.Center,verticalAlignment=Alignment.CenterVertically){Text(text="1",modifier=Modifier.padding(4.dp))Text(text="12",modifier=Modifier.padding(4.dp))Text(text="123",modifier=Modifier.padding(4.dp))}
  1. Start、CenterHorizontally、End:Column 的 horizontalAlignment 使用
Column(modifier=Modifier.fillMaxSize().background(Color.LightGray).padding(16.dp),verticalArrangement=Arrangement.Center,horizontalAlignment=Alignment.CenterHorizontally){Text(text="test123",modifier=Modifier.padding(4.dp))Text(text="test123test123",modifier=Modifier.padding(4.dp))Text(text="test123test123test123",modifier=Modifier.padding(4.dp))}

二、Arrangement

  • Arrangement 用于控制子元素排列方式
说明
Top顶部对齐
Center垂直居中
Bottom底部对齐
SpaceEvenly等间距分布
SpaceBetween两端对齐,中间均匀分布
SpaceAround均匀分布

三、Carousel

dataclassCarouselItem(valid:Int,@DrawableResvalredId:Int,valdescription:String)valitems=remember{listOf(CarouselItem(0,R.drawable.img1,"img1"),CarouselItem(1,R.drawable.img2,"img2"),CarouselItem(2,R.drawable.img3,"img3"),CarouselItem(3,R.drawable.img4,"img4"),CarouselItem(4,R.drawable.img5,"img5"),)}HorizontalUncontainedCarousel(state=rememberCarouselState{items.count()},// CarouselState 实例,使用 `rememberCarouselState { itemCount }` 创建,其中 itemCount 是轮播界面中的项的总数itemWidth=186.dp,// 定义轮播界面中每个项的宽度(固定宽度)itemSpacing=8.dp,// 定义轮播界面中相邻项之间的间距modifier=Modifier.fillMaxWidth().wrapContentHeight(),contentPadding=PaddingValues(horizontal=16.dp,vertical=16.dp),// 定义轮播界面中内容的内边距,确保内容不贴边){itemIndex->valitem=items[itemIndex]Image(modifier=Modifier.height(205.dp).maskClip(MaterialTheme.shapes.extraLarge),// 使用圆角形状裁剪图片painter=painterResource(id=item.redId),// 加载 drawable 资源contentDescription=item.description,contentScale=ContentScale.Crop)}
dataclassCarouselItem(valid:Int,@DrawableResvalredId:Int,valdescription:String)valitems=remember{listOf(CarouselItem(0,R.drawable.img1,"img1"),CarouselItem(1,R.drawable.img2,"img2"),CarouselItem(2,R.drawable.img3,"img3"),CarouselItem(3,R.drawable.img4,"img4"),CarouselItem(4,R.drawable.img5,"img5"),)}HorizontalMultiBrowseCarousel(state=rememberCarouselState{items.count()},// CarouselState 实例,使用 `rememberCarouselState { itemCount }` 创建,其中 itemCount 是轮播界面中的项的总数preferredItemWidth=186.dp,// 定义轮播界面中每个项的宽度(首选宽度)itemSpacing=8.dp,// 定义轮播界面中相邻项之间的间距modifier=Modifier.fillMaxWidth().wrapContentHeight(),contentPadding=PaddingValues(horizontal=16.dp,vertical=16.dp),// 定义轮播界面中内容的内边距,确保内容不贴边){itemIndex->valitem=items[itemIndex]Image(modifier=Modifier.height(205.dp).maskClip(MaterialTheme.shapes.extraLarge),// 使用圆角形状裁剪图片painter=painterResource(id=item.redId),// 加载 drawable 资源contentDescription=item.description,contentScale=ContentScale.Crop)}

四、Checkbox

valcontext=LocalContext.currentvarcheckedbyremember{mutableStateOf(true)}Box(modifier=Modifier.fillMaxSize(),contentAlignment=Alignment.Center){Checkbox(checked=checked,onCheckedChange={checked=it Toast.makeText(context,"checked:$checked",Toast.LENGTH_SHORT).show()})}

五、TriStateCheckbox

1、基本介绍
  • TriStateCheckbox 继承 Checkbox 但增加中间状态,用于表示三种状态
状态说明
On所有子项都选中,显示对勾(√)
Off没有任何子项选中,显示空框
Indeterminate子项中既有选中又有取消选中,显示减号(-)
  • TriStateCheckbox 常用于嵌套复选框的父级控制,适用于如下场景
  1. 文件管理器全选 / 部分选

  2. 表格批量操作

  3. 设置项的多级控制

2、演示
valchildCheckedStates=remember{mutableStateListOf(false,false,false)}valparentState=when{childCheckedStates.all{it}->ToggleableState.On// 全都是 truechildCheckedStates.none{it}->ToggleableState.Off// 没有任何 trueelse->ToggleableState.Indeterminate}Column(modifier=Modifier.fillMaxSize(),horizontalAlignment=Alignment.CenterHorizontally,verticalArrangement=Arrangement.Center){Row(verticalAlignment=Alignment.CenterVertically,){Text("Select all")TriStateCheckbox(state=parentState,onClick={// 当 parentState 不等于 On 时,即状态是 Off 或 Indeterminate 时,所有子项设置为选中// 当 parentState 等于 On 时,所有子项设置为取消选中valnewState=parentState!=ToggleableState.On childCheckedStates.forEachIndexed{index,_->childCheckedStates[index]=newState}})}childCheckedStates.forEachIndexed{index,checked->Row(verticalAlignment=Alignment.CenterVertically,){Text("Option${index+1}")Checkbox(checked=checked,onCheckedChange={isChecked->childCheckedStates[index]=isChecked})}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/4 22:58:54

春节放假通知模板设计技巧:排版配色与文案撰写要点

春节放假通知模板:我的6年设计实战与工具推荐 作为一名在平面设计行业摸爬滚打了6年的内容创作者,我深刻体会到春节前夕那份特有的忙碌与期待。每年这个时候,无论是企业HR、行政人员,还是自媒体运营者,都会面临一个共…

作者头像 李华
网站建设 2026/4/4 4:48:55

改进粒子群算法的RSSI定位附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

作者头像 李华
网站建设 2026/4/4 19:13:26

【YOLOv13多模态创新改进】联合Mamba创新首发| SCI 一区2025| 引入CMFM 跨模态特征融合Mamba模块,实现 RGB与红外等多模态特征的高效融合,含多种创新改进,顶会顶刊发文热点

一、本文介绍 🔥本文给大家介绍使用 CMFM 跨模态特征融合Mamba模块改进 YOLOv13 多模态融合目标检测框架,可在保持实时性的前提下实现高效稳定的跨模态特征融合,充分利用可见光与红外信息的互补优势,显著提升复杂环境下的检测鲁棒性。该模块基于 Mamba 状态空间模型进行…

作者头像 李华
网站建设 2026/4/4 14:37:47

sql语言之分组语句group by

在sql语言中,group by 是分组语言语法是select 表达式 from 表名 group by 分组字段比如说上图的数据表,这是部分截图,表名叫table_tom,假如要按city字段进行分组,计算score各字段总和select sum("score") a…

作者头像 李华
网站建设 2026/4/4 13:15:45

jsp蛋糕甜品店管理系统4fx6j--(程序+源码+数据库+调试部署+开发环境)

本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。 系统程序文件列表 用户,商品分类,商品尺寸,商品信息 开题报告内容 一、研究背景及意义 随着互联网的普及和消费者购物习惯的改变&…

作者头像 李华
网站建设 2026/4/4 14:52:02

PADS 多层板设计时怎么设置满足3W间距 或 不在某参考层布线

如何设置满足3W间距 在router中 右键选择网络 双击你要设置的网络 弹出 选择安全间距给这个网络添加一个特殊安全间距 比如其3w需10mil 我就 这样其与其他导线的安全距离就为10mil了 你布线时drc打开一不满足就会报错提示你 设置在参考层内不布线 如果你想要在哪个网络不…

作者头像 李华