首页 > 其他分享 >Jetpack Compose 基本布局(7)

Jetpack Compose 基本布局(7)

时间:2024-09-17 12:22:37浏览次数:13  
标签:Compose 组合 Column Jetpack 布局 Text 元素 dp

导读大纲

1.1 探索基本布局

  1. 布局是 Jetpack Compose UI 的支柱
    • 它们提供在屏幕上组织和排列可组合函数(如文本、图片和按钮)的结构
    • 在本节中,我们将介绍三种最常用的基本布局: Column , Row 和 Box

1.1.1 布局介绍

  1. Jetpack Compose 中的布局本身就是可组合元素

    • 它们充当容器元素, 将其他可组合元素作为其子元素
    • 通过在布局中嵌套可组合元素,并使用修改器来控制它们的位置和样式
      1. 可以创建复杂且具有视觉吸引力的UI
  2. Column布局

    • 列布局将其子元素从上到下垂直排列,把它想象成 UI 元素的堆叠
    • <1> 两个Text组件和Image组件将垂直堆叠
@Composable
fun MyLayout() {
    Column {                               // <1>
        Text("Item 1")
        Text("Item 2")
        Image(painter = painterResource(id = R.drawable.my_image), contentDescription = null)
    }
}
  1. Row布局
    • 行布局则是将其子元素从左到右水平排列,就像将UI元素并排放置一样
    • <1> 这里,图像、文本和按钮可组合元素水平排列成一行
Row {                        // <1>
    Image(painter = painterResource(id = R.drawable.my_image), contentDescription = null)
    Text("Item 1")
    Button(onClick = { /* ... */ }) {
        Text("Click Me")
    }
}
  1. Box布局
    • 方框布局专为重叠元素而设计
      1. 其子元素相互堆叠, 最后一个子元素绘制在最上面
    • <1> 这里,文本组件显示在图像组件的顶部
      1. 首先进入预览面板,点击各个元素会看到左侧可组合元素也在相应变动
      2. 跟随本教程走的或者有基础的,肯定不会迷路,对于迷茫的小伙伴
      3. 运行App或者指定的预览元素
        • 如果发现安装App后显示不对, 查看一下所使用的运行配置
          title
      4. 这里切换到整个app配置后运行到设备中, 并使用布局检查查看元素
        title
@Preview(showBackground = true)
@Composable
fun MyLayout() {
    Box {                                          // <1>
        Image(painter = painterResource(id = R.drawable.ic_launcher_background), contentDescription = null)
        Text(
            text = "Hello from behind the image!",
            modifier = Modifier.align(Alignment.Center)
        )
    }
}

1.1.2 定位和尺寸的修改器

  1. 修改器在自定义布局中可组合元素的布局方式方面起着至关重要的作用

  2. 以下是一些用于定位和调整大小的常用修改器

    • padding
      1. 在可组合元素周围添加内间距
    • size
      1. 设置可组合元素的宽度和高度
    • fillMaxWidth , fillMaxHeight
      1. 使可组合元素占据可用的宽度或高度
    • align
      1. 控制可组合元素在其父布局中的对齐方式
        • 例如,Alignment.Center, Alignment.TopStart
Column {
    Text(
        text = "Item 1",
        modifier = Modifier
            .padding(8.dp)
            .fillMaxWidth()
    )
    // ...
}

1.2 组合可组合元素

  1. 当您开始组合核心组件时,Jetpack Compose 的真正威力就会显现出来
    • 在布局(列、行、方框)中使用文本、图片、按钮等
    • 这样,您就可以创建更复杂、更实用的用户界面元素
      1. 在整个应用程序中重复使用

1.2.1 在布局内组合可组合元素

  1. Product Card
    • <1>在本例中,我们创建一个 ProductCard 可组合元素
      • 用于显示产品图片、名称、描述和 "立即购买"按钮
    • <2> 我们使用 Column 垂直排列元素
      • 使用嵌套Column显示文本内容和按钮
@Composable
fun ProductCard(product: Product) {
    Column(                                              // <1>
        modifier = Modifier
            .padding(16.dp)
            .fillMaxWidth()
            .border(1.dp, Color.Gray)
    ) {
        Image(
            painter = painterResource(id = product.imageResourceId),
            contentDescription = product.name,
            modifier = Modifier
                .fillMaxWidth()
                .height(180.dp)
        )
        Column(modifier = Modifier.padding(16.dp)) {    // <2>
            Text(text = product.name, fontWeight = FontWeight.Bold)
            Text(text = product.description)
            Spacer(modifier = Modifier.height(8.dp))
            Button(onClick = { /* Handle purchase */ }) {
                Text("Buy Now")
            }
        }
    }
}
  1. User Profile Header
    • <1> UserProfileHeader使用 Row 布局
      1. 来水平显示用户的个人资料图片、姓名和用户名
    • <2> 并使用嵌套的 Column 来显示文本内容
@Composable
fun UserProfileHeader(user: User) {
    Row(                                      // <1>
        modifier = Modifier
            .padding(16.dp)
            .fillMaxWidth()
    ) {
        Image(
            painter = painterResource(id = user.profileImageResourceId),
            contentDescription = "Profile picture of ${user.name}",
            modifier = Modifier
                .size(64.dp)
                .clip(CircleShape)
        )
        Spacer(modifier = Modifier.width(16.dp))
        Column {                               // <2>
            Text(text = user.name, fontWeight = FontWeight.Bold)
            Text(text = "@${user.username}")
        }
    }
}

1.2.2 组织可组合元素的最佳实践

  1. 分解成更小的可组合函数
    • 将用户界面分成更小的、可重复使用的可组合函数
    • 这将使你的代码更加模块化,更易于测试,并提高可重用性.
  2. 为可组合元素取有意义的名称
    • 为可组合元素选择能反映其用途的描述性名称
    • 这样可以提高代码的可读性,使UI的结构更容易理解
  3. 使用统一的风格
    • Compose 代码遵循统一的风格规范
    • 这包括命名约定、缩进和代码格式
  4. 分离关注点
    • 尽量将用户界面逻辑(展示)与业务逻辑(数据获取、计算)分开
    • 这种关注点分离提高代码的可维护性和可测试性

1.2.3 真实世界的场景

  1. List Items
    • 您可以为 LazyColumn 或 LazyRow 中的列表项创建可重用的可组合元素
  2. App Bars
    • 设计带有图标、标题和操作自定义应用栏
  3. Dialog Boxes
    • 创建带有自定义内容和按钮的对话框
  4. Forms
    • 创建带有输入字段、标签和验证信息的表单
  5. Complex Screens
    • 复杂的屏幕分解成更小的可组合组件

标签:Compose,组合,Column,Jetpack,布局,Text,元素,dp
From: https://blog.csdn.net/qq_36154755/article/details/142308692

相关文章

  • docker-compose 安装activemq、rocketmq
    目录结构创建目录#activemq目录mkdir-p/docker/activemq/datamkdir-p/docker/activemq/conf#rocket目录mkdir-p/docker/rocketmq/broker1/confmkdir-p/docker/rocketmq/broker1/logsmkdir-p/docker/rocketmq/broker1/storemkdir-p/docker/rocketmq/names......
  • 一步到位:通过 Docker Compose 部署 EFK 进行 Docker 日志采集
    一、EFK简介Elasticsearch:一个开源的分布式搜索和分析引擎,用于存储和查询日志数据。它是EFK的核心组件,负责高效地存储和检索日志信息。Filebeat:一个轻量级的日志采集器,主要用于将日志文件数据发送到Logstash或Elasticsearch。Filebeat设计用于高效地转发和处理日志......
  • Docker-compose:管理多个容器
    170.Docker-compose容器编排Docker-Compose是Docker公司推出的一个开源工具软件,可以管理多个Docker容器组成一个应用。用户需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器(或者说能实现对Dock......
  • 重生之我要当前端大王–鸿蒙next篇 02 常用布局组件
    重生之我要当前端大王–鸿蒙next篇02常用布局组件第三篇章鸿蒙next星河版前言阅读本章,学习Flex布局、Grid网格布局、Stack层叠布局一、Flex布局和html的flex相识,arkUi的flex组件也分为主轴和副轴,并提供声明式api进行设置排布样式,让我们来学习一下@Entry@Component......
  • Docker-Compose搭建RustDesk服务器
    前置条件:电脑安装RustDesk客户端,服务器安装Docker及docker-compose官方文档:安装::RustDesk文档操作流程:使用Vim编写docker-compose.yml文件,修改需要的端口,最好按照官方对应的端口来操作,<>内替换成服务器对外的端口。记住挂载文件路径,容器运行后会生成密钥保存在挂载......
  • 【鸿蒙】HarmonyOS NEXT星河入门到实战4-ArkTS界面布局深入
    目录一、布局元素组成1.1内边距-padding1.2外边距margin1.3实战案例-QQ音乐-登录1.4边框border 二、设置组件圆角2.1基本圆角设置2.2特殊形状的圆角设置三、背景属性3.1背景图片-backgroundImage3.2背景图片位置-backgroundImagePosition3.3背景定位-......
  • 零基础快速上手HarmonyOS ArkTS开发5---从简单的页面开始2---使用List组件构建列表、G
    接着继续往下学习页面布局的知识。最近发现之前学习这一章节的内容在官方已经被下了,替换成了另外一个案例了(https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717497398588123):而且整个视频的风格也不一样了,先看看之前的这个美女讲师:再看看现在的:哇塞,档次......
  • docker-compose快速部署flink1.18.1
    目的用于规范flink组件的部署操作,可用于开发测试环境快速部署前置条件基于centos7实例名内网IP主机名(Hostname)角色实例1172.20.20.2test-20-2节点1开始部署1.提前准备好flink:1.18.1镜像dockerpullflink:1.18.1部署目录:/app/funo/flink2.docker-......
  • 【CSS in Depth 2 精译_030】5.2 Grid 网格布局中的网格结构剖析(下)
    当前内容所在位置(可进入专栏查看其他译好的章节内容)第一章层叠、优先级与继承(已完结)1.1层叠1.2继承1.3特殊值1.4简写属性1.5CSS渐进式增强技术1.6本章小结第二章相对单位(已完结)2.1相对单位的威力2.2em与rem2.3告别像素思维2.4视口的相对单位2.5......
  • CSS基本布局理解——WEB开发系列38
    对CSS学习已经接近尾声,下面你可以对以下两道“小卡拉米”测试进行测试下CSS理解程度。题1:基于栅格布局的现代博客首页设计题目要求:创建一个博客首页布局,包含一个顶部导航栏、一个主要的内容区域(左侧为博客文章列表,右侧为一个侧边栏显示推荐内容),以及一个底部的页脚。要求......