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基础布局相关推荐

  1. Flutter基础布局组件及实现

    https://www.cnblogs.com/lxlx1798/p/11084904.html 一,概述 Flutter中拥有30多种预定义的布局widget,常用的有Container.Paddi ...

  2. 网页UI设计基础之线框图设计(栅格建立、基础布局、分屏、文字排版)

    线框图介绍 概念 线框图(Wireframe或Wireframing) 网站线框图是网站框架的草图,是网站设计师根据网页设计标准将客户需求图形化的一种展现形式. 例如: 特点 作为一个视觉设计的起点, ...

  3. Vue3电商项目实战-个人中心模块3【07-订单管理-tabs组件、08-订单管理-基础布局】

    文章目录 07-订单管理-tabs组件 08-订单管理-基础布局 07-订单管理-tabs组件 目的:封装一个高可用tabs组件 大致步骤: xtx-tabs 组件容器 可以有多个 xtx-tabs- ...

  4. Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】

    文章目录 04-头部购物车-商品列表-本地 05-头部购物车-删除操作-本地 06-购物车页面-基础布局 04-头部购物车-商品列表-本地 目的:根据本地存储的商品获取最新的库存价格和有效状态. 大致 ...

  5. 个人中心 (二) 01-编辑资料-基础布局-Popup弹出层-底部弹出-头像男女时间 DatetimePicker时间选择转换-dayjs(value).format('YYYY-MM-DD')

    个人中心-编辑资料-基础布局-Popup 弹出层-底部弹出模式-头像-男女-时间 & DatetimePicker 时间选择-年月日模式 & dayjs(value) 转换成日期对象, ...

  6. Compose自定义布局的使用

    本文字数:10501字 预计阅读时间:27 分钟 Compose自定义布局的使用 我们知道,在Android View体系下,自定义布局需要继承ViewGroup重写onMeasure.onLayou ...

  7. 简单介绍一下Component基础布局

    鸿蒙系统现已经有超过千万的用户升级,后续的用户数量非常可观,鸿蒙开发人才数量稀缺.今天小千来介绍一下Component基础布局,实现用户交互非常重要的概念之一,同学们带好小本本. 在HarmonyOS ...

  8. Vue3电商项目实战-结算支付 4【08-支付-支付页面-基础布局、10-支付-支付页面-信息展示、11-支付-支付流程】

    文章目录 08-支付-支付页面-基础布局 10-支付-支付页面-信息展示 11-支付-支付流程 08-支付-支付页面-基础布局 目的:配置路由和支付页面基础布局. src/views/member/p ...

  9. 移动开发 Jetpack Compose 组件布局

    Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...

最新文章

  1. 把计算机网络关闭啦怎么打开,我在笔记本电脑里的“打开或关闭系统图标”中关闭了“网络系统图标”,哪么怎样做才能打开...
  2. 【数据结构第一周】最大子列和问题整理
  3. 手写实现RPC框架基础功能
  4. 【C++学习详细教程目录】
  5. JS调用模式以及bind()方法
  6. (十五)final关键字
  7. Linux目录结构、bash的基础命令学习
  8. 亲测可用sqlyog激活注册码
  9. 解决知网外文文献无法下载全文的问题
  10. API安全前景与趋势
  11. autoit3 自动安装QQ音乐【版本QQMusicV7.96.2062.0525】
  12. 简单版数独计算器-升级版
  13. opengl dfdx dfdy
  14. Oracle中Start With的用法
  15. IDEA-第一个Javaweb项目
  16. 架构实践全景图 | 文末赠书
  17. 首汽旗下「GoFun」:共享危机四伏,区块链是好的出路吗?
  18. Python数据攻略-Pandas进行Excel文件读写
  19. 光流文件(.flo)转图像
  20. 多媒体开发你必须知道的各种音频格式之间的比较

热门文章

  1. 奢侈品养护平台包大师获3000万元A轮融资,投资方青松基金、不惑创投
  2. 心之所向,你和远方。
  3. PowerPoint新功能设计器,
  4. Openresty实战应用(2)
  5. 利用css修饰个人主页,利用html/css设计一个简单个人主页
  6. 我的计算机屏幕我作主,我的计算机屏幕我做主.ppt
  7. V神讲述veTokens的恩怨情仇:原理、权力与未来趋势
  8. 网络地址转换(NAT)技术
  9. Ubuntu驱动安装------官方指导版
  10. What makes for Effective detection proposals?论文阅读笔记