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内置修饰符表

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值