news 2026/5/14 18:02:46

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/5/12 8:50:07

基于Matlab的CNN竞争神经网络的聚类分析附Matlab代码

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

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

基于SSA-BPNN+BPNN定位附Matlab代码

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

作者头像 李华
网站建设 2026/5/13 21:01:49

FTP文件传输客户端SmartFTP

链接:https://pan.quark.cn/s/ee41718cd51dsmartftp是一款功能非常专业且强大的FTP客户端,允许用户在本地计算机和Internet上的服务器之间传输文件,并提供安全、可靠和高效的传输服务,这让它成为了一个强大的有力FTP工具。与同类型…

作者头像 李华
网站建设 2026/5/13 6:36:04

Autodesk 3ds Max

链接:https://pan.quark.cn/s/32dc8799b6a4Autodesk 3ds Max 是一款专业的跨平台应用程序,用于游戏创建和设计中的 3D 建模、动画和可视化。该程序将有助于开发模型、场景、动画、材料以及与 3D 世界相关的一切。电影中的所有特效、新型号的设备、衣服、…

作者头像 李华
网站建设 2026/5/11 8:27:45

Agentic AI提示工程的“避坑指南”:优化交互反馈的8个注意事项

Agentic AI提示工程的“避坑指南”:优化交互反馈的8个注意事项 1. 引入与连接:从“失控的客服Agent”说起 凌晨2点,电商平台的客服后台弹出一条用户投诉:“你们的AI客服简直是摆设!我问‘订单为什么还没发货’,它居然回复‘请检查你的支付信息’——我明明已经付款了!…

作者头像 李华
网站建设 2026/5/11 7:39:09

从ETL到AI:大数据规范性分析的技术演进路线

从ETL到AI:大数据规范性分析的技术演进路线 关键词:ETL、大数据规范性分析、数据清洗、机器学习、技术演进、数据治理、智能分析 摘要:本文以“技术演进”为主线,从传统ETL(抽取-转换-加载)出发,逐步解析大数据规范性分析如何从人工规则驱动,升级为AI智能驱动的完整技术…

作者头像 李华