Jetpack Compose - 列表 - 居中对齐

150

我正在使用Jetpack Compose创建一个布局,其中包含一列。我希望将此列中的项目居中:

 Column(modifier = ExpandedWidth) {
        Text(text = item.title)
        Text(text = item.description)
 }

Jetpack Compose非常棒,但缺少一些现成的有用组件。 我已经整理了一套免费的Composeables供开发者自由使用, 或者开发者可以提交他们自己的Composeables来分享。目前有15个非常有帮助的Composeables, 附带屏幕截图、代码等。http://composeables.com/ - pstorli
19个回答

281

您可以使用这些参数

例如:

Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
) {
        Text(
                text = "First item",
                modifier = Modifier.padding(16.dp)
        )
        Text(
                text = "Second item",
                modifier = Modifier.padding(16.dp)
        )
        Text(
                text = "Third item",
                modifier = Modifier.padding(16.dp)
        )
}

输入图片说明

如果你只想水平居中,只需使用:

Column(
        modifier = Modifier.fillMaxWidth(),
        horizontalAlignment = Alignment.CenterHorizontally
) {
    Column (  ) { ... }

在此输入图像描述


2
我在align上遇到错误,但我将Jetpack Compose依赖更新为1.0.0-alpha03,就解决了。 之前使用的是1.0.0-alpha02,谢谢! - Peter Haddad
你可以直接使用 Modifier.fillMaxSize() 代替 Modifier.fillMaxWidth().fillMaxHeight() - YektaDev
@GabrieleMariotti 或许有些偏题,但是你如何将“TopAppBar”文本居中在你的图片中呢?这其实就是我来这里的原因 :) - Rafael
@Rafael 请查看 https://dev59.com/ZVEG5IYBdhLWcg3wWbBH#67499847 - Gabriele Mariotti
1
终于有人给出了一个合理的答案。谢谢! - Joaquin Iurchuk
显示剩余2条评论

83

您可以使用

Text(
  text = item.title,
  textAlign = TextAlign.Center,
  modifier = Modifier.align(alignment = Alignment.CenterHorizontally)
)
  • textAlign用于对盒子中的文本进行对齐。
  • Modifier.align()用于将文本框在列内对齐。

20
Modifier.align 仅适用于 BoxScope - Jim Ovejera
textAlign 是正确的答案。 - Odaym
textAlign = TextAlign.Center 是正确的。请注意它不属于 modifier - undefined

17

Column view's alignings

通过查看列内对齐视图的所有可能性,您可以在附件中找到详细信息。希望这能帮助您!


12

使用此功能

   Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    )

1
这个绝对是要使用的,最新版本的可组合 1.0.0 等。 - thelastworm

10

1
这已经在其他答案中提到过,例如 https://dev59.com/_lIH5IYBdhLWcg3wa9lo#66391295。 - Eric Aya
设置 heightIn(min = 40.dp) 并测试其在水平方向上是否居中。 - Amir

9

或者你可以创建自己的可组合部件,并在任何地方使用它:

@Composable
fun Center( modifier: Modifier = Modifier, content: @Composable ColumnScope.() -> Unit) {
    Column(
        modifier = modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally,
        content = content
    )
}

你可以像这样使用:

Center {
    Text(text = "Text 1")
    Text(text = "Text 2")
}

6

我并不是太喜欢它,但这就是对我有效的方法:

Column(modifier = Modifier.fillMaxSize(),
                horizontalAlignment = Alignment.CenterHorizontally,
                verticalArrangement = Arrangement.Center) {
                //Your composable elements
            }

Compose 1.0.0-beta07


2
Modifier.fillMaxSize() instead of Modifier.fillMaxWidth().fillMaxHeight() - Dr.jacky

5

你也可以使用 Text 组件的 textAlign 属性。

Text(
    modifier = Modifier.fillMaxWidth(),
    text = item.title,
    textAlign = TextAlign.Center
)
Text(
    modifier = Modifier.fillMaxWidth(),
    text = item.description,
    textAlign = TextAlign.Center
)

4

您可以通过以下方式对单个元素应用重力,然后它将居中显示。

Column(modifier = ExpandedWidth) {
       Text(modifier = Gravity.Center, text = item.title)
       Text(modifier = Gravity.Center, text = item.description)
}

58
此答案已过时,因为“Text”现在不允许使用“Gravity”。 - Vipul Asri
2
Text(text = item.title, modifier = Modifier.gravity(Alignment.CenterHorizontally)) - ByteMe
7
使用alpha07时,使用Text(text = item.title, modifier = Modifier.align(Alignment.CenterHorizontally)) - ininmm
1
Compose的1.0.0-beta09版本中,Text的修饰符align不存在。 - Lucas Sousa
4
以上的建议(至少在Compose 1.0.0中)无法解决问题,但这个可以: style = TextStyle(textAlign = TextAlign.Center) - Jonik

4
您可以使用 Arrangement.Center
  • 将子组件尽可能靠近主轴的中心位置

示例代码

@Composable
fun Column(

    arrangement: Arrangement = Arrangement.Center,

)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接