Layout

Layout

温馨提示:本文最后更新于2025-12-11 10:37:38,某些文章具有时效性,若有错误或已失效,请在下方留言

Jetpack Compose 提供了多种选项,用于在容器内对齐和排列 UI 元素,比如 ColumnRowBox

常用的布局类型
常用的布局类型

Arrangement

Arrangement 用于控制子项在主轴方向上的间距,因此在 Column 中会看到 verticalArrangement 参数,而在 Row 中会看到 horizontalArrangement 参数。

Column

verticalArrangement:指定 Column 内部子项的垂直排列方式。它可以设置为:Top(默认)BottomCenterSpaceBetweenSpaceEvenlySpaceAround

图片[2]-Layout-Stewed Noodles 资源
Column 的排列方式

SpaceBetween: 两端无间距,子项之间平均分布。
SpaceEvenly: 每个子项两侧都有空间,但边缘空间是内部的一半。
SpaceAround: 所有空隙完全相等。

Row

horizontalArrangement:指定 Row 内部子项的水平排列方式。它可以设置为:StartEndCenterSpaceBetweenSpaceEvenlySpaceAround

图片[3]-Layout-Stewed Noodles 资源
Row 的排列方式

Surface

在 Jetpack Compose 中,Surface 是一个非常核心且常用的 UI 组件,用来提供:

  • 背景颜色
  • 阴影(elevation)
  • 圆角(shape)
  • 边框
  • 点击效果
Surface(
    modifier = Modifier.size(100.dp),
    color = Color.Cyan,
    contentColor = colorResource(id = R.color.black),
    shadowElevation = 1.dp,
    border = BorderStroke(1.dp, Color.Green)
) {
    Text(text = "Stewed Noodles!")
}

Surface 是一个带主题风格的容器。Compose 里所有 Material 组件(ButtonCardDialog)其实内部都是基于 Surface 构建的。

Surface 一次只能包含一个子元素。

Scaffold

ScaffoldCompose UI 的基础结构组件,它提供了一个包含常用元素的布局,例如 TopAppBarBottomAppBarFloatingActionButton。它的主要目的,是通过提供一个标准化的布局结构来简化开发过程,并且允许你在此基础上进行轻松的自定义。

@OptIn(ExperimentalMaterial3Api::class) // Add this annotation here
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    enableEdgeToEdge()
    setContent {
        Scaffold(
            topBar = {
                TopAppBar(title = {Text("TopAppBar Title")})
            },
            bottomBar = {
                BottomAppBar(contentColor = Color.Cyan) {

                }
            },
            floatingActionButton = {
                FloatingActionButton(onClick = {}) { }
            }
        ) {
        }
    }
}
}

运行的效果,如下所示

Scaffold 容器
Scaffold 容器

TopAppBar

位于界面顶部,通常包含应用标题、导航按钮以及其他相关操作项。

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MyTopAppBar() {
    TopAppBar(
        title = {Text(text = "TopAppBar Title")},
        colors = TopAppBarDefaults.topAppBarColors(
            containerColor = Color.Cyan,
            titleContentColor = Color.Blue ),
        navigationIcon = {
            IconButton(onClick = {

            }) {
                Icon(painter = painterResource(R.drawable.baseline_menu_24), contentDescription = "Menu")
            }
        },
        actions = {
            IconButton(onClick = {

            }) {
                Icon(painter = painterResource(R.drawable.outline_10k_24), contentDescription = "Setting")
            }
        }
    )
}

运行效果图

运行效果图
运行效果图

BottomAppBar

位于界面底部,通常用于放置导航图标和其他与当前界面相关的操作按钮。

@Composable
fun MyBottomAppBar(){
    BottomAppBar(
        containerColor = Color.Cyan,
        contentColor = Color.Black
    ) {
        Row(
            horizontalArrangement = Arrangement.SpaceEvenly,
            modifier = Modifier.fillMaxSize()
        ) {
            IconButton(onClick = {

            }) {
                Icon(painter = painterResource(R.drawable.outline_add_home_24), contentDescription = "Home")
            }
            IconButton(onClick = {

            }) {
                Icon(painter = painterResource(R.drawable.outline_alarm_24), contentDescription = "Alarm")
            }
            IconButton(onClick = {

            }) {
                Icon(painter = painterResource(R.drawable.outline_archive_24), contentDescription = "Archive")
            }
        }
    }
}

运行效果

运行效果
运行效果

FloatingActionButton

一个悬浮的圆形按钮,用于触发主要用户操作,例如新增项目或跳转到应用的重要功能区域。

@Composable
fun MyFloatingActionButton() {
    FloatingActionButton(
        onClick = {},
        containerColor = Color.Green,
        contentColor = Color.White
    ) {
        IconButton(onClick = {

        }) {
            Icon(painter = painterResource(R.drawable.outline_add_home_24), contentDescription = "Home")
        }
    }
}

运行效果

运行效果
运行效果
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容