Compose基础布局
Compose基础布局
- 常规布局
- ConstraintLayout
常规布局
Compose 可以有效地处理嵌套布局,堪称设计复杂界面的绝佳工具。这与 Android Views 相比是一个进步;在 Android Views 中,出于性能方面的原因,需要避免使用嵌套布局。
Column示例:
@Composable
fun ArtistCard() {Column {Text("Alfred Sisley")Text("3 minutes ago")}
}
Row示例:
@Composable
fun ArtistCard(artist: Artist) {Row(verticalAlignment = Alignment.CenterVertically) {Image(/*...*/)Column {Text(artist.name)Text(artist.lastSeenOnline)}}
}
Box示例:
@Composable
fun ArtistAvatar(artist: Artist) {Box {Image(/*...*/)Icon(/*...*/)}
}
ConstraintLayout
Jetpack Compose中依然支持ConstraintLayout。ConstraintLayout 有助于根据可组合项的相对位置将它们放置在屏幕上,它是使用多个嵌套 Row、Column、Box 和自定义布局元素的替代方案。在实现对齐要求比较复杂的较大布局时,ConstraintLayout 很有用。
如需使用ConstraintLayout ,需在build.gradle中添加依赖项:
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha07"
Compose 中的 ConstraintLayout 支持 DSL:
引用是使用 createRefs() 或 createRefFor() 创建的,ConstraintLayout
中的每个可组合项都需要有与之关联的引用。约束条件是使用 constrainAs() 修饰符提供的,该修饰符将引用作为参数,可让您在主体
lambda 中指定其约束条件。约束条件是使用 linkTo() 或其他有用的方法指定的。
parent 是一个现有的引用,可用于指定对
ConstraintLayout 可组合项本身的约束条件。
ConstraintLayout示例:
@Composable
fun ConstraintLayoutContent() {// ConstraintLayout布局,宽度默认与内容同宽,此处指定为同父布局最大宽度ConstraintLayout(Modifier.fillMaxWidth()) {// Create references for the composables to constrainval (button, text) = createRefs()Button(onClick = { /*Do something*/ },// Assign reference "button" to the Button composable// and constrain it to the top of the ConstraintLayoutmodifier = Modifier.constrainAs(button) {//使用linkTo作为控件位置约束条件top.linkTo(parent.top, margin = 16.dp)//水平居中centerHorizontallyTo(parent)}) {Text(text = "Button")}// Assign reference "text" to the Text composable// and constrain it to the bottom of the Button composableText(text = "Text", Modifier.constrainAs(text) {//使用linkTo作为控件位置约束条件top.linkTo(button.bottom, margin = 16.dp)
// bottom.linkTo(parent.bottom, margin = 16.dp)// Centers Text horizontally in the ConstraintLayoutcenterHorizontallyTo(parent)})}
}
在上述 ConstraintLayout 示例中,约束条件是在应用它们的可组合项中使用修饰符以内嵌方式指定的。不过,在某些情况下,最好将约束条件与应用它们的布局解耦:
- 将 ConstraintSet 作为参数传递给 ConstraintLayout。
- 使用 layoutId 修饰符将在 ConstraintSet 中创建的引用分配给可组合项。
@Composable
fun DecoupledConstraintLayout() {BoxWithConstraints {val constraints = if (minWidth < 600.dp) {decoupledConstraints(margin = 16.dp) // Portrait constraints} else {decoupledConstraints(margin = 32.dp) // Landscape constraints}ConstraintLayout(constraints) {Button(onClick = { /* Do something */ },modifier = Modifier.layoutId("button") // 指定id) {Text("Button")}Text("Text", Modifier.layoutId("text")) // 指定id}}
}private fun decoupledConstraints(margin: Dp): ConstraintSet {return ConstraintSet {val button = createRefFor("button")val text = createRefFor("text")constrain(button) {top.linkTo(parent.top, margin = margin)}constrain(text) {top.linkTo(button.bottom, margin)}}
}
Compose基础布局相关推荐
- Flutter基础布局组件及实现
https://www.cnblogs.com/lxlx1798/p/11084904.html 一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Paddi ...
- 网页UI设计基础之线框图设计(栅格建立、基础布局、分屏、文字排版)
线框图介绍 概念 线框图(Wireframe或Wireframing) 网站线框图是网站框架的草图,是网站设计师根据网页设计标准将客户需求图形化的一种展现形式. 例如: 特点 作为一个视觉设计的起点, ...
- Vue3电商项目实战-个人中心模块3【07-订单管理-tabs组件、08-订单管理-基础布局】
文章目录 07-订单管理-tabs组件 08-订单管理-基础布局 07-订单管理-tabs组件 目的:封装一个高可用tabs组件 大致步骤: xtx-tabs 组件容器 可以有多个 xtx-tabs- ...
- Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】
文章目录 04-头部购物车-商品列表-本地 05-头部购物车-删除操作-本地 06-购物车页面-基础布局 04-头部购物车-商品列表-本地 目的:根据本地存储的商品获取最新的库存价格和有效状态. 大致 ...
- 个人中心 (二) 01-编辑资料-基础布局-Popup弹出层-底部弹出-头像男女时间 DatetimePicker时间选择转换-dayjs(value).format('YYYY-MM-DD')
个人中心-编辑资料-基础布局-Popup 弹出层-底部弹出模式-头像-男女-时间 & DatetimePicker 时间选择-年月日模式 & dayjs(value) 转换成日期对象, ...
- Compose自定义布局的使用
本文字数:10501字 预计阅读时间:27 分钟 Compose自定义布局的使用 我们知道,在Android View体系下,自定义布局需要继承ViewGroup重写onMeasure.onLayou ...
- 简单介绍一下Component基础布局
鸿蒙系统现已经有超过千万的用户升级,后续的用户数量非常可观,鸿蒙开发人才数量稀缺.今天小千来介绍一下Component基础布局,实现用户交互非常重要的概念之一,同学们带好小本本. 在HarmonyOS ...
- Vue3电商项目实战-结算支付 4【08-支付-支付页面-基础布局、10-支付-支付页面-信息展示、11-支付-支付流程】
文章目录 08-支付-支付页面-基础布局 10-支付-支付页面-信息展示 11-支付-支付流程 08-支付-支付页面-基础布局 目的:配置路由和支付页面基础布局. src/views/member/p ...
- 移动开发 Jetpack Compose 组件布局
Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...
最新文章
- 把计算机网络关闭啦怎么打开,我在笔记本电脑里的“打开或关闭系统图标”中关闭了“网络系统图标”,哪么怎样做才能打开...
- 【数据结构第一周】最大子列和问题整理
- 手写实现RPC框架基础功能
- 【C++学习详细教程目录】
- JS调用模式以及bind()方法
- (十五)final关键字
- Linux目录结构、bash的基础命令学习
- 亲测可用sqlyog激活注册码
- 解决知网外文文献无法下载全文的问题
- API安全前景与趋势
- autoit3 自动安装QQ音乐【版本QQMusicV7.96.2062.0525】
- 简单版数独计算器-升级版
- opengl dfdx dfdy
- Oracle中Start With的用法
- IDEA-第一个Javaweb项目
- 架构实践全景图 | 文末赠书
- 首汽旗下「GoFun」:共享危机四伏,区块链是好的出路吗?
- Python数据攻略-Pandas进行Excel文件读写
- 光流文件(.flo)转图像
- 多媒体开发你必须知道的各种音频格式之间的比较