当前位置: 首页 > news >正文

Android Compose基础布局——从传统XML的视角切入了解

0 为什么要有布局

和传统XML一样,若不使用具体的布局,所有控件将堆叠在一起,无法呈现所想的视图效果。

例如,下面在界面中声明了两个文本控件,但却未用布局包裹,就会导致两个控件重叠。

@Preview @Composable fun ArtistCard() { Text("Alfred Sisley") Text("3 minutes ago") }

一 垂直布局 Column

被Column布局包裹的控件将会垂直排列,就像传统XML中的LinearLayout将orientation设置为了vertical。

如下,用Column对控件进行包裹,便实现了垂直布局。

@Preview @Composable fun ArtistCardColumn() { Column { Text("Alfred Sisley") Text("3 minutes ago") } }

二 水平布局 Row

被Row布局包裹的控件将会水平排列,就像传统XML中的LinearLayout将orientation设置为了horizontal。

@Preview @Composable fun ArtistCardColumn() { Row { Text("Alfred Sisley") Text("3 minutes ago") } }

三 堆叠排列布局Box

从Box这个单词来理解这个布局的特性,Box即“箱子”,箱子中存放的物品都是堆叠或排列起来的,所以我将其称为堆叠排列布局。

Box布局的使用比较复杂,需要通过属性参数才能 实现对子控件的布局排列。下面简单介绍下Box的两个常用属性。

contentAlignment

这个属性主要用于设置Box中子控件的位置,如上下左右中。

Modifier

Modifier是Compose中各个控件最常用到的修饰属性,几乎可以为每个控件设置Modifier属性。它可以设置如同传统xml中的matchParent、padding、width、height、background等一样的效果,且可以链式调用,简化了传统xml的很多代码。

@Preview @Composable fun BoxTest() { Box( modifier = Modifier .size(300.dp) .background(Color.Cyan), contentAlignment = Alignment.BottomStart ) { Image(painter = painterResource(R.drawable.ic_launcher_background), "") Icon(painter = painterResource(R.drawable.ic_launcher_foreground), "") } }

实际应用

我们可以利用Box布局来实现一个类似于网易云黑胶唱片的效果

效果展示

黑胶唱片旋转效果演示

代码
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { HelloWorldComposeTheme { Surface { VinylRecordView() } } } } } // 歌曲数据类 data class Song( val name: String, val artist: String, val coverRes: Int, @RawRes val rawRes: Int ) //当前播放歌曲 val curSong = Song("我害怕", "薛之谦", R.drawable.demo_music1, R.raw.demo_music1) //黑胶唱片效果实现 @Preview @Composable fun VinylRecordView() { var diskRotation by remember { mutableFloatStateOf(0f) } val rotationSpeed = 0.042f // 每帧递增度数,可调(速度) val isPlaying = remember { mutableStateOf(true) } // 动画:黑胶旋转 LaunchedEffect(isPlaying.value) { while (isPlaying.value) { diskRotation += rotationSpeed * 16 // 16是大致每帧毫秒 if (diskRotation > 360f) diskRotation -= 360f delay(16) } // 这里不处理归零,保持在当前角度,暂停状态 } Box( modifier = Modifier .fillMaxWidth() .fillMaxHeight() .aspectRatio(1f)//裁切为正方形 .graphicsLayer(rotationZ = diskRotation),//设置旋转动画 contentAlignment = Alignment.Center ) { //黑胶 Box( modifier = Modifier .clip(CircleShape) .background(Color.Black, CircleShape) .fillMaxSize(0.7f) .align(Alignment.Center) ) { Image( painter = painterResource(id = R.drawable.ic_disc), contentDescription = null, modifier = Modifier .fillMaxSize() .clip(CircleShape) ) } // 封面 Box( modifier = Modifier .clip(CircleShape) .background(Color.White, CircleShape) .fillMaxSize(0.5f) .align(Alignment.Center) ) { Image( painter = painterResource(id = curSong.coverRes), contentDescription = null, modifier = Modifier .fillMaxSize() .clip(CircleShape) ) } } }

四 其余布局

除了上述所提及的基础布局外,Compose还提供了很多其他的布局。如BoxWithConstraints对应xml中的ConstraintLayout;LazyVerticalGrid对应xml中的GridLayout布局等等。还有Compose提供了许多开箱即用的布局,例如ModalNavigationDrawer、TopAppBar等,只需要再进行具体的元素填充即可完成所需要的界面。

http://www.zskr.cn/news/1510075.html

相关文章:

  • 填高考志愿这道难题,也有AI参与了
  • 1983-2026年中国人才政策文本数据
  • 仿真轨迹中的高级模式发现与DSL应用
  • 麻省理工学院等机构研究成果揭示博弈学习的新边界
  • 沈阳黄金回收抵押怎么选?2026本地合规办理避坑指南 - 百航
  • 2001-2024年上市公司供应链地理加权距离
  • 2026年上海网约车租赁选购指南:从合规资质到押金透明,一文避坑 - 优质企业观察收录
  • Keyboard Chatter Blocker:如何彻底解决Windows机械键盘连击问题的终极免费方案
  • RVC语音克隆革命:10分钟训练专属AI声音的完整指南
  • 青岛高端珠宝回收避坑红黑榜|权威鉴定!高工价安全回收渠道推荐 - 名奢变现站
  • A2A Python SDK 源码架构解读:一个请求是如何被处理的
  • 天音披露魅族两年亏超34亿,手机停摆后转型车机系统能否自救?
  • 卫生间漏水到楼下怎么查找漏水点?2026随州24小时上门维修电话TOP7机构推荐,免费勘察+精准定位,专业师傅处理屋顶墙体洗手间暗管漏水 - 一修哥咨询
  • 解锁音乐自由:3种方法让你的加密音频文件随处播放
  • 2026年定制化工程塑料采购指南:耐磨pe聚乙烯板材与高强度UPE板材源头厂家对标 - 优质企业观察收录
  • AI新周期下派欧云二次冲击港交所,边缘计算市场谁能拔得头筹?
  • 专业5G仿真平台UERANSIM:构建完整5G网络测试环境的开源解决方案
  • 3种高效方法解决NCM加密音乐格式转换,实现跨平台播放自由
  • 2026山东聊城青少年叛逆教育学校地址汇总!全封闭管教,这几家正规机构家长放心选 - 小途xt
  • 遗传算法工程化实战:从教科书到工业级稳定收敛
  • 别让命名毁了你的流片:Innovus中update_names/changeInstName的隐藏技巧与避坑指南
  • 遗传算法实操三支柱:选择压力、适应度缩放与精英保留
  • 卖包必看!苏州二手名包回收套路揭秘,避开隐形扣费陷阱 - 名奢变现站
  • C++ 智能指针完全指南(三):weak_ptr 与循环引用
  • 深度解析:精油代工 核心工艺与合规生产实践 - 资讯快报
  • 别再只盯着BIOS了!手把手教你用Port 60/64和ASL代码调试笔记本EC(Embedded Controller)
  • 2026 亳州卫生间漏水不用砸砖?微创补漏靠谱方案 - 苏易修缮
  • 2026年定制UPE超高分子量聚乙烯板材、耐磨pe聚乙烯板加工源头厂家对标指南 - 优质企业观察收录
  • 蓝桥杯真题保姆级解析:用BFS数岛屿,从地图边界海水搜索讲起
  • 长春手表回收避坑全攻略|劳力士/百达翡丽高价出手指南,2026二级市场行情+门店实测 - 天天生活分享日志