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等,只需要再进行具体的元素填充即可完成所需要的界面。

相关推荐
JustNow_Man1 天前
【Claude Code】 中给 Python + XML 项目建立可靠验证体系
xml·linux·python
AI产品实战2 天前
Gradle打包生成dependencies.xml详解
xml·java·gradle
斯特凡今天也很帅4 天前
xml页面可以打开,不报错,但是显示数据的地方也不显示,我是怎么解决的
xml·vue.js
前网易架构师-高司机4 天前
带标注的21种中药材识别数据集,识别率73.8%数据集,2237张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·中药·药材·中草药
snow@li5 天前
Java:pom.xml全景深度分析 / 机制、标签、依赖、打包、生产避坑全解 / 工程基石
xml·java·开发语言
田里的水稻5 天前
EP_XML\JSON配置文件和YAML
xml·运维·人工智能·机器人·自动驾驶·json
xiangji5 天前
开源完美模块组件化可扩展的Xml解析器Hand.ParseXml
xml·模块化·组件化·可扩展
我命由我123457 天前
Android 构建项目问题:XML 片段出错,com.ctc.wstx.exc.WstxUnexpectedCharException
android·xml·android studio·android jetpack·android-studio·android runtime
PixelBai8 天前
JSON转XML使用教程:从入门到精通
xml·json
Android-Flutter9 天前
android compose shadow 阴影 使用
android·kotlin·compose