喷气背包组合-立柱-重心

我正在用 Jetpack Compose 创建一个布局,这里有一个专栏,我希望在这个专栏中有中心项目:

 Column(modifier = ExpandedWidth) {
Text(text = item.title)
Text(text = item.description)
}
115457 次浏览

You can use Column(crossAxisAlignment = CrossAxisAlignment.Center) . It works like gravity.

You can use Arrangement.Center

  • Place child components as close to the center of the main axis

SAMPLE CODE

@Composable
fun Column(


arrangement: Arrangement = Arrangement.Center,


)

You have the option to apply gravity on the individual items as follows then it will center the items.

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

You could use FlexColumn to bring content in the center as it supports CrossAxisAlignment.

FlexColumn(crossAxisAlignment = CrossAxisAlignment.Center) {
inflexible {
Text(text = item.title)
Text(text = item.description)
}
}

Warp it inside inflexible so that widgets will not occupy the full screen.

In the same way if you want to bring views to the center of the screen with FlexColumn than use mainAxisAlignment along with crossAxisAlignment

FlexColumn(mainAxisAlignment = MainAxisAlignment.Center,
crossAxisAlignment = CrossAxisAlignment.Center) {
inflexible {
Text(text = item.title)
Text(text = item.description)
}
}

This is how you do it as of the latest version of compose(0.1.0-dev05)

For you to center the text inside this container, you need to use the LayoutAlign modifier.

Column(modifier = LayoutWidth.Fill + LayoutAlign.Center) {
Text(text = item.title)
Text(text = item.description)
}

if you are using 0.1.0-dev09 you can modify the gravity or arrangement attributes by using the parameters horizontalAlignment and verticalArrangement

@Composable
fun centeredColumn() {
return Column (
modifier = Modifier.height(100.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Image(asset = imageResource(id = R.drawable.ic_emojo_logo_white))
Text(text = stringResource(id = R.string.login_subtitle))
}
}

You can use these parameters:

Something like:

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)
)
}

enter image description here

If you want only to center horizontally just use:

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

enter image description here

To center horizontally

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

To center both horizontally and vertically in the parent surface

Column(modifier = Modifier.fillMaxWidth().fillMaxHeight(), verticalArrangement = Arrangement.Center) {
Text(text = item.title)
Text(text = item.description)
}

You can use

Text(
text = item.title,
textAlign = TextAlign.Center,
modifier = Modifier.align(alignment = Alignment.CenterHorizontally)
)
  • textAlign is for aligning text inside the box.
  • Modifier.align() is for aligning text box inside column

In case if you are using lazyColumn to load list and want make whole item center you can use this

LazyColumn( horizontalAlignment = Alignment.CenterHorizontally) {


}

use

modifier = Modifier.align(Alignment.CenterHorizontally)

I don't like it too much, but this is what it worked to me:

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

Compose 1.0.0-beta07

Text(
"Hello World",
textAlign = TextAlign.Center,
modifier = Modifier.width(150.dp)
)

You can use TextAlign attribute to center the texts.

Reference - https://developer.android.com/jetpack/compose/text

Use this

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

You can also use textAlign property of Text composable

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

Alternatively you can create your own composable and use it everywhere:

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

And you use like this:

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

Column view's alignings

You can find details in attachment by looking figures of all possibilities of aligning view inside column