IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Compose(二)布局 -> 正文阅读

[移动开发]Android Compose(二)布局

基础知识

1. 目标

  • 高性能
  • 轻松编写自定义布局

2. 基础知识

@Composable
fun CardInfo() {
    Text(text = "杰洛特")
    Text(text = "来自利维亚")
}

在这里插入图片描述

3. 标准布局组件

3-1. 纵向布局

使用Column沿垂直方向布局

@Composable
fun CardInfo() {
    Column {
        Text(text = "杰洛特")
        Text(text = "来自利维亚")
    }
}

在这里插入图片描述
注意,两个Text默认是左对齐的

3-2. 横向布局

使用Row沿水平方向布局

@Composable
fun CardInfo() {
    Row {
        Text(text = "杰洛特")
        Text(text = "来自利维亚", fontSize = 8.sp)
    }
}

在这里插入图片描述
修改了字体大小,可以发现组件沿顶部对齐

3-3. 搭配使用


@Composable
fun CardInfo() {
    Row(verticalAlignment = Alignment.CenterVertically) {
        Image(
            painter = painterResource(id = R.drawable.witcher),
            contentDescription = null,
            modifier = Modifier
                .padding(12.dp, 12.dp)
                .height(40.dp)
                .width(40.dp)
                .clip(RoundedCornerShape(20.dp)),
            contentScale = ContentScale.Crop
        )
        
        Column(modifier = Modifier.padding(end = 12.dp)) {
            Text(text = "杰洛特")
            Text(text = "来自利维亚", fontSize = 8.sp)
        }
    }
}

在这里插入图片描述

3-4. Box

不添加Box布局作用域的情况下,其实已经是对应的布局方式了

@Preview
@Composable
fun DefaultPreview() {
//    Box {
        Text(像搭积木像搭积木
            text = "1",
            modifier = Modifier.background(Color.Blue)
                .width(40.dp)
                .height(20.dp),
            fontSize = 15.sp
        )
        Text(
            text = "2",
            modifier = Modifier.background(Color.Yellow)
                .height(15.dp)
                .width(30.dp),
            fontSize = 10.sp
        )
        Text(
            text = "3",
            modifier = Modifier.background(Color.Green)
                .height(8.dp)
                .width(8.dp),
            fontSize = 5.sp
        )
//    }
}

在这里插入图片描述
三个带背景色的文本组件,按照顺序叠在一起,先绘制的在下,后绘制的在上
默认的情况下,都是以Android布局的原点,即左上角对齐的

然后解除注释,使用Box似乎没有任何改变
在这里插入图片描述
实质上,这里Box的意义在于,每一个元素相对于上一个元素的位置关系,将自己的父元素作为参照,找到自己的定位

Box (contentAlignment = Alignment.BottomCenter) {
	// 省略
}

如果为其添加对齐属性,那么其中每个元素向上一个看齐
在这里插入图片描述
这个布局就像搭积木一样,以俯视的角度,一层层的往上垒

3-5. 常用属性

Row的作用域中

Row(
            verticalAlignment = Alignment.CenterVertically,
            horizontalArrangement = Arrangement.SpaceAround,
            modifier = Modifier
                .width(100.dp)
                .height(100.dp)
        ) {
            Text(
                text = "1",
                modifier = Modifier
                    .background(Color(106, 90, 205, 255))
                    .width(30.dp)
                    .height(30.dp),
                fontSize = 15.sp
            )
            Text(
                text = "2",
                modifier = Modifier
                    .background(Color(127, 255, 212))
                    .height(15.dp)
                    .width(15.dp),
                fontSize = 10.sp
            )
            Text(
                text = "3",
                modifier = Modifier
                    .background(Color(255, 140, 105))
                    .height(8.dp)
                    .width(8.dp),
                fontSize = 5.sp
            )
        }

在这里插入图片描述
借用CSSFlex布局相关的概念进行理解
当前布局中的元素是沿着水平方向进行排列,因为这是Row赋予的,默认情况下按照顺序从左至右,这个方向为图中红色箭头的方向,暂且称为主轴
我们会用Row是因为我们想让元素整体呈现出水平的排布,那么垂直方向上的排布则属于需要调整的细节或者说是次要的,垂直方向上由上而下,沿着绿色箭头方向,暂且称为副轴

接下来,就对应到了需要用到的属性ArrangementAlignment主轴对应Arrangement副轴对应Alignment

无论是RowColumn我们都能够直接了解到其主轴的方向,Arrangement可以理解为是沿着主轴方向的分布,可能更加贴切

Alignment是对齐,那么对齐的其实是前一个创建的元素,这就是参考,那么第一个元素对齐的就是容器
在这里插入图片描述
然后加上主轴的方向,就是对应与RowColumn的属性了

4. 修饰符

主要用途:

  • 更改可组合项的大小、布局、行为和外观
  • 添加信息,如无障碍标签
  • 处理用户输入
  • 添加高级互动,如使元素可点击、可滚动、可拖动或可缩放

4-1. 修饰符顺序

修饰符是Modifier对象,可进行链式调用,每次设置完属性会返回自身,因此调用顺序不同可能造成截然不同的结果

整个调用修饰的过程就像车间的流水线,过程是环环相扣的,每一次调用便是一次加工,我们使用时的先想想我们要的是什么样的产品,然后布置一下对应的加工流程

在这里插入图片描述
之前的代码其实有一处能拿来说事,这个padding的顺序不同会造成影响,先看现在的UI
在这里插入图片描述
这个padding是图片四周的边距
在这里插入图片描述
再换个位置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以发现得到的结果是不一样的

4-2. 内置修饰符

内置修饰附表
Compose中对于修饰符给出了多种操作,可以应用到修饰符上,也就是modifier上体现出来的节点
在这里插入图片描述
这里就是3个内置修饰符

附录:

Compose布局
Flex布局
Compose内置修饰符表

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-26 12:12:28  更:2021-07-26 12:13:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 9:57:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码