Jetpack:029-Jetpack中的网格布局

news2024/11/26 20:39:45

文章目录

  • 1. 概念介绍
  • 2. 使用方法
  • 3. 代码与效果
    • 3.1 示例代码
    • 3.2 运行效果
  • 4. 内容总结

我们在上一章回中介绍了Jetpack中Card相关的内容,本章回中主要介 网格布局。闲话休提,让我们一起Talk Android Jetpack吧!

1. 概念介绍

我们在本章回中介绍的网格布局是一种类似表格的布局组件,它提供像表格一样的窗口,开发人员只需要在窗口中放入组件就可以,如果大家有使用Android View开发程序的验验,那么肯定使用过这样的布局。该布局常用的场景是浏览图片,多张图片按照行和列的方式一起呈现在我们面前。

在Jetpack Compse中使用可组合函数LazyVerticalGridLazyHorizontalGrid实现垂直和水平方向的网格布局,本章回中将详细介绍它们的使用方法。

2. 使用方法

可组合函数LazyVerticalGrid提供了相关的参数来控制自己,下面是该函数中常用的参数:

  • columns参数:该参数主要用来网络中的行数和列数;
  • verticalArrangement参数: 主要用来控制垂直方向内容之间的间隔;
  • horizontalArrangement参数: 主要用来控制水平方向内容之间的间隔;
  • content参数:该参数主要用来存放网格布局中的其它组件;

上面的这些参数中,我们重点介绍content参数和columns参数。

content参数的类型是可组合函数,它通过item或者items函数来添加其它组件,我们在介绍LazyColumn可组合函数介绍过,因此大家可以参考我们在LazyColumn内容中的介绍。

接着看一下columns参数,它是GridCells类型,它提供两种布局形式,详细如下:

  • Adaptive:它只保证网格中各个成员的列间隔,自动排列每行的成员数量;
  • Fixed:它只保证网格中的列的数量,成员之间的列间隔大小自动计算;

大家现在可能觉得有些抽象,我们将在后面小节中通过代码来演示,下面是程序运行的效果图,这样可能更加直观地说明问题。

在这里插入图片描述

该图的上半部分是使用Adaptive实现的效果,图中每一行之间的间隔是固定的,但是网格布局中的列数是自动计算出来的。图中下半部分是使用Fixed实现的效果,图中列的数量是固定的,但是每一列之间的间隔是自动计算出来的。

我们在这里只介绍了LazyVerticalGrid函数的用法,LazyHorizontalGrid函数的用法和它完全相同,不同之处在它提供的是水平方向的网格布局,它提供的参数主要控制网格中的行,因此,我们就不再详细介绍了,大家可以自行去实践。

3. 代码与效果

介绍完可组合函数的用法后,我们通过具体的示例代码来演示网格布局的使用方法。

3.1 示例代码

@Composable
fun Grids() {
    LazyVerticalGrid(
        //在保证内容间隔为100dp的前提下,自动排列行和列中的内容,数量不确定
        columns = GridCells.Adaptive(100.dp)) {
        items(count = 9, itemContent = {
            Image(painter = painterResource(id = R.drawable.ic_logo), contentDescription = null) } )
    }
}

@Composable
fun GridsAnother() {
     LazyVerticalGrid(
        //在保证内容数量的前提下,自动排列行和列中的内容之间的间隔,间隔不确定
         //它有一个共同的缺点,无法调整行距
        columns = GridCells.Fixed(4)) {
        items(count = 9, itemContent = {
            Image(painter = painterResource(id = R.drawable.ic_logo), contentDescription = null)
        } )
    }
}

@Composable
fun GridWithCard() {
    var index: Int
    LazyVerticalGrid(columns = GridCells.Fixed(3),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        verticalArrangement = Arrangement.spacedBy(4.dp)
    ) {
        items(count = 9,
//            span = { GridItemSpan(it) },//通过span创建不规则的Grid,
            itemContent = {
            index = it+1
            //通过各种计算,card不适合放在Grid中,因为它的大小受Grid影响,会自动调节
                //不过使用水平和垂直的参数后,可以有效地控制各个Card之间的间隔
            Card ( modifier = Modifier.size(40.dp),
            ){  //通过Box让Card中的内容居中显示
                Box(modifier = Modifier.align(Alignment.CenterHorizontally)){
                    Text(text = "$index")
                }
            }
        })
    }
}

我们在上面的示例代码封装了三个独立的函数,前两个函数主要演示columns参数的两种不同设置方式,它们运行效果图在前面的小节中给大家演示过。

3.2 运行效果

第三个函数是结合Card实现的页面,它有两种形式,一种是有规则的网格,行和列都均匀分布,另外一种是不规则的网格,它通过itemsspan参数来控制,此时的行和列是不均匀分布,
大家可以参考下面的图片,它们是程序的运行效果图。
在这里插入图片描述

在这里插入图片描述

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • 网格布局主要用来提供表格形状的布局;
  • 网格布局通过columns参数来控制行数和列数,主要有两种方式;
  • 网格布局中的内容通过item或者items来添加,其用法和LazyColumn中的完全相同;
  • 网格布局的内容可以按照行或者列均匀分布,也可以不均匀分布,主要通过item的span参数来控制;

看官们,与Jetpack中网格布局相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1173185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第九章《搞懂算法:决策树是怎么回事》笔记

决策树算法是机器学习中很经典的一个算法,它既可以作为分类算法,也可以作为回归算法。 9.1 典型的决策树是什么样的 决策树算法是依据“分而治之”的思想,每次根据某属性的值对样本进行分类,然后传递给下个属性继续进行分类判断…

【CMU15445】Fall 2019, Project 3: Query Execution 实验记录

目录 实验准备实验测试Task 1: CREATING A CATALOG TABLE SQL 执行是由数据库解析器转化为一个由多个 executor 组成的 Query Plan 来完成的,本实验选择了火山模型来完成 query execution,这一次的 project 就是实现各种 exeutor,从而可以通过…

2014年亚太杯APMCM数学建模大赛C题公共基础课教师专业化培养方式研究求解全过程文档及程序

2014年亚太杯APMCM数学建模大赛 C题 公共基础课教师专业化培养方式研究 原题再现 近年来,世界基础工业、信息产业、服务业的跨越式发展引发了大量人才需求,导致了职业教育的飞速发展,除原有专科层次高等职业教育院校外,大量普通…

行业安卓主板-基于RK3568/3288/3588的电子班牌/人脸识别门禁/室内对讲门禁方案解决方案(二)

电子班牌 智能电子班牌可在主页实时显示班级全面的基本信息,包括天气、班名、课程表、值日表等,并发布学校通知、班级通知。学生可刷卡自动登陆系统进行课堂反馈,教师和家长可及时了解教学反馈,打通学校、教师、学生之间的互动通…

逆向学习记录(2)windows常用基本操作及用环境变量配置上多个python版本

1、如何打开cmd 第一种方法:按下winr,运行cmd 第二种方法:进入一个目录,点击路径处(显示蓝色背景),然后直接键盘输入cmd,回车,运行cmd并直接进入此目录。 2、命令dir&am…

OpenFeign 的超时重试机制以及底层实现原理

目录 1. 什么是 OpenFeign? 2. OpenFeign 的功能升级 3. OpenFeign 内置的超时重试机制 3.1 配置超时重试 3.2 覆盖 Retryer 对象 4. 自定义超时重试机制 4.1 为什么需要自定义超时重试机制 4.2 如何自定义超时重试机制 5. OpenFeign 超时重试的底层原理 5…

04-附注 三维空间中的线性变换

附注 三维空间中的线性变换 三维空间线性变换 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 三维空间线性变换 图1 绕y轴旋转90 绕y轴旋转90后,各基向量所在的坐标如图1所示。用旋转后的各基向量作为矩阵的列,就得到变换矩阵。变换矩阵…

简单代理模式

代理模式 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 结构图如下: ISubject接口,定义了RealSubject和Proxy的共用接口方法,这样就可以在任何使用RealSubject的地方使用Proxy代理。 ISubject接口 public…

心脏骤停急救赋能

文章目录 0. 背景知识1. 遇到有人突然倒地怎么办1.1 应急反应系统1.2 高质量CPR1.2.1 胸外按压1.2.2 人工呼吸 1.3 AED除颤1.3.1 AED用法 1.4 高级心肺复苏1.5 入院治疗1.6 康复 0. 背景知识 中国每30s就有人倒地,他们可能是工作压力大的年轻人(工程师群…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据…

CleanMyMac X2024试用版下载及使用教程

CleanMyMac X是一款颇受欢迎的专业清理软件,拥有十多项强大的功能,可以进行系统清理、清空废纸篓、清除大旧型文件、程序卸载、除恶意软件、系统维护等等,并且这款清理软件操作简易,非常好上手,特别适用于那些刚入手苹…

Sync Folders Pro(文件夹数据同步工具)

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具,旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备,如 iPhone,iPad,iPod,Android 等。通过这款软件,用户可…

【Linux】 基础命令 第一篇

目录 ls​编辑 ls -l ls -a ls -i ls ./* cd指令&&pwd cd . && cd .. 绝对路径: dir/Linux/2023/10 相对路径: 跳转至另一路径​编辑 cd~ cd - touch指令(创建文件) stat指令: mkdir 指令(创建文件夹) tree指…

win10设置windows永不更新

以下方法能全部设置都要全部设置。 方法一:Windows设置 要想关闭Win10自动更新,比较简单的一种方法就是进入到Windows设置中,将Windows更新直接关闭。步骤如下: 1、按“Windows I”键,打开Windows设置,再…

【C语言基础入门】二级指针、一维数组与指针、二维数组与指针

文章目录 前言一. 二级指针1.1 二级指针是什么?1.2 二级指针使用示例1.3 拓展:n级指针 二. 一维数组与指针:2.1 利用指针遍历数组:2.2 指针数组2.3 数组指针 三、 二维数组指针3.1 二维数组指针是什么?示例代码 3.2 指针数组示例代码 3.3 利用…

【Hadoop】Apache Hadoop YARN

🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 感谢点赞和关注 ,每天进步一点点!加油! 目录 一、YARN概述 二、YARN基础架构 2.1 ResourceManager&#x…

Java 正则表达式分组匹配

前几篇文章都是简单判断是否满足匹配规则,当需要提取匹配结果时就用到分组匹配。 分组匹配 可以判断是否满足正则表达式,然后提取出子串。 有些时候电话号码是以 123-4567-8899 这样显示的,我们要判断某个字符串是这种形式的并分别提起三段…

总线类设备驱动——SPI

目录 一、 SPI协议简介 二、 Linux SPI驱动 三、 SPI设备驱动范例 一、 SPI协议简介 SPI(Serial Peripheral Interface)由 Motorola 开发,他并不是严格意义上的标准协议但是几乎所有的厂商都遵从这一协议,所以可以说它是一个“事实上的”协议。SPI 是同…

学习GTEx数据库

每个个体的不同的器官组织的基因(Gene)都是相同的,但为什么有的表型为肝脏组织,帮助人类代谢?有的是肌肉组织,帮助人类运动?其原因是,不同的人体组织表达的基因并不相同。 &#xff…