前言
Jetpack Compose 提供了一系列用于构建用户界面的布局组件,这些组件可以帮助您创建各种复杂的布局结构。
对应关系
View | Jetpack Compose |
---|---|
FrameLayout |
Box & Modifier |
RelativeLayout |
Box & Modifier |
LinearLayout |
Row , Column |
ConstraintLayout |
ConstraintLayout 移植到了 Compose 中 |
RecyclerView |
LazyColumn or LazyRow |
ScrollView |
Modifier.verticalScroll() or Modifier.horizontalScroll() |
层叠布局
Box: Box
是一个简单的布局组件,用于在单个平面上叠加子元素。
您可以使用 contentAlignment
属性来指定子元素的对齐方式。
默认
1 |
|
双向滚动
1 | Box( |
垂直布局
Column: Column
组件用于垂直排列子元素。
默认
您可以使用 verticalArrangement
属性来指定子元素的垂直排列方式,使用 horizontalAlignment
属性来指定子元素的水平对齐方式。
1 |
|
纵向滚动
1 | Column(Modifier.verticalScroll(rememberScrollState())) { |
横向滚动
1 | Column(Modifier.horizontalScroll(rememberScrollState())) { |
双向滚动
1 | Column( |
水平布局
Row: Row
组件用于水平排列子元素,允许您指定水平排列方式和垂直对齐方式。
默认
默认不能滚动,会挤压最后的组件。
1 |
|
横向滚动
1 | Row(Modifier.horizontalScroll(rememberScrollState())) { |
纵向滚动
1 | Row(Modifier.verticalScroll(rememberScrollState())) { |
双向滚动
1 | Row( |
约束布局
ConstraintLayout: ConstraintLayout
是一个强大的布局组件,允许您使用约束关系来定义子元素之间的位置关系。
这使得创建复杂的布局结构变得更加灵活和简单。
1 |
|
流式布局
1 |
|
其中
- horizontalArrangement 水平间距
- verticalArrangement 垂直间距
Surface(表面)
Surface
是一个容器组件,用于包裹其他组件并为其提供样式、背景色等属性。
Surface
可以帮助您创建具有不同样式的可视化元素,并为其提供外观属性。
1 | Surface( |
设置背景形状
1 | Surface( |
Card(卡片)
Card
是一个容器组件,类似于 Surface
,用于包裹其他组件并为其提供样式、背景色等属性。
Card
组件通常用于显示单个元素或组件,并为其添加阴影效果以使其在界面上突出显示。
1 | Card( |
Surface和Card的区别
Surface
和 Card
都是用来定义 UI 元素的容器,它们之间有几个区别:
默认样式:
Surface
默认情况下没有圆角背景是白色。Card
默认情况下有圆角背景是灰色。
功能和用途:
Surface
是一个基本的容器,用于在屏幕上绘制内容。它提供了绘制颜色、形状、边框等的基本功能。通常用于创建自定义的UI元素,例如背景、容器等。
Surface
内部是个Box
,内容放在Box
内。Card
是一个更高级的容器,提供了带阴影、圆角等样式的卡片视图。通常用于显示单个项目或内容,例如列表项、详细信息卡等。
Card
内部是个Surface
,Surface
下是个Column
,内容放在Column
内。
交互性:
- 默认都没有点击效果,添加
Modifier.clickable { }
都有点击的涟漪效果。
- 默认都没有点击效果,添加
Surface
1 | fun Surface( |
Card
1 | fun Card( |
状态栏高度
1 | Box( |