Android Compose基础布局——从传统XML的视角切入了解

0 为什么要有布局

和传统XML一样,若不使用具体的布局,所有控件将堆叠在一起,无法呈现所想的视图效果。

例如,下面在界面中声明了两个文本控件,但却未用布局包裹,就会导致两个控件重叠。

Kotlin 复制代码
@Preview
@Composable
fun ArtistCard() {
    Text("Alfred Sisley")
    Text("3 minutes ago")
}

一 垂直布局 Column

被Column布局包裹的控件将会垂直排列,就像传统XML中的LinearLayout将orientation设置为了vertical。

如下,用Column对控件进行包裹,便实现了垂直布局。

Kotlin 复制代码
@Preview
@Composable
fun ArtistCardColumn() {
    Column {
        Text("Alfred Sisley")
        Text("3 minutes ago")
    }
}

二 水平布局 Row

被Row布局包裹的控件将会水平排列,就像传统XML中的LinearLayout将orientation设置为了horizontal。

Kotlin 复制代码
@Preview
@Composable
fun ArtistCardColumn() {
    Row {
        Text("Alfred Sisley")
        Text("3 minutes ago")
    }
}

三 堆叠排列布局Box

从Box这个单词来理解这个布局的特性,Box即"箱子",箱子中存放的物品都是堆叠或排列起来的,所以我将其称为堆叠排列布局。

Box布局的使用比较复杂,需要通过属性参数才能 实现对子控件的布局排列。下面简单介绍下Box的两个常用属性。

contentAlignment

这个属性主要用于设置Box中子控件的位置,如上下左右中。

Modifier

Modifier是Compose中各个控件最常用到的修饰属性,几乎可以为每个控件设置Modifier属性。它可以设置如同传统xml中的matchParent、padding、width、height、background等一样的效果,且可以链式调用,简化了传统xml的很多代码。

Kotlin 复制代码
@Preview
@Composable
fun BoxTest() {
    Box(
        modifier = Modifier
            .size(300.dp)
            .background(Color.Cyan),
        contentAlignment = Alignment.BottomStart
    ) {
        Image(painter = painterResource(R.drawable.ic_launcher_background), "")
        Icon(painter = painterResource(R.drawable.ic_launcher_foreground), "")
    }
}

四 其余布局

除了上述所提及的基础布局外,Compose还提供了很多其他的布局。如BoxWithConstraints对应xml中的ConstraintLayout;LazyVerticalGrid对应xml中的GridLayout布局等等。还有Compose提供了许多开箱即用的布局,例如ModalNavigationDrawer、TopAppBar等,只需要再进行具体的元素填充即可完成所需要的界面。

相关推荐
ly76892 天前
XML 从入门到实践:语法、命名空间、XPath、XSD 与 Java 安全解析
xml·java·python
蜡台4 天前
Jetpack Compose 从入门到精通
android·前端·kotlin·compose·jepack
欧特克_Glodon5 天前
OpenCV计算机视觉开发入门与实践<十二>:XML 和 YAML 文件读写
xml·c++·opencv·计算机视觉
程序员-珍5 天前
安卓开发:同名 styles.xml 在不同分支/文件夹的合并规则
android·xml·前端
LitchiCheng8 天前
还在改xml调相机?MuJoCo交互式可视化调整相机安装位置
xml·数码相机
richard_yuu8 天前
JSON vs XML vs 二进制:3种序列化终极选型
xml·c++·qt·学习·json
秋田君10 天前
QT_XML文件操作
xml·数据库·qt
数据知道11 天前
XXE 漏洞深度实战:XML 外部实体攻击与 OOB 带外
xml·网络·安全·网络安全
云水一下11 天前
零基础玩转bWAPP靶场(四十七):XSS - Reflected (AJAX/XML)
xml·web安全·ajax·xss·bwapp
爱敲键盘的猴子13 天前
深入理解 Spring IoC -- 基于 XML 的 Bean 配置详解
xml·java·spring