我正在用 Jetpack Compose 创建一个布局,这里有一个专栏,我希望在这个专栏中有中心项目:
Column(modifier = ExpandedWidth) { Text(text = item.title) Text(text = item.description) }
You can use Column(crossAxisAlignment = CrossAxisAlignment.Center) . It works like gravity.
Column(crossAxisAlignment = CrossAxisAlignment.Center)
You can use Arrangement.Center
Arrangement.Center
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.
LayoutAlign
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
0.1.0-dev09
horizontalAlignment
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) ) }
If you want only to center horizontally just use:
Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { Column ( ) { ... }
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) )
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.
TextAlign
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
textAlign
Text
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") }
You can find details in attachment by looking figures of all possibilities of aligning view inside column