Jetpack Compose - 文本居中
Jetpack Compose - Centering Text
我正在使用 Jetpack Compose 创建一个简单的闪存卡。
这个想法是你点击闪存卡,它会给你答案。
但是,我遇到了一个基本问题。
不幸的是...我什至找不到官方文档,所以我的学习风格一直相信自动更正系统...
无论如何,我认为问题出在 Box() 或 Text() 上。
我为盒子的重力添加了一个 Align.CenterEnd。然而,这似乎是就盒子而言居中的唯一方法。另一方面,Text() 没有给出任何方法来这样做(它有引力但它似乎没有改变任何东西)
方向正确的手会很棒。
附带说明一下,我知道这会提供免费答案。但是我如何在点击时更改 $question 的文本。正如我所想的那样,可组合项会刷新?...因此,应该在屏幕上重新生成吗?也许不是?
谢谢!
val typography = MaterialTheme.typography
val context = ContextAmbient.current
var question = "How many Bananas should go in my Smoothie?"
Column(modifier = Modifier.padding(30.dp).then(Modifier.fillMaxWidth())
.then(Modifier.wrapContentSize(Alignment.Center))
.clickable(onClick = { Toast.makeText(context, "3 Bananas are needed!", Toast.LENGTH_LONG).show()} ) /*question = "3 Bananas required"*/
.clip(shape = RoundedCornerShape(16.dp))) {
Box(modifier = Modifier.preferredSize(350.dp)
.gravity(align = Alignment.CenterHorizontally)
.border(width = 4.dp, color = Gray, shape = RoundedCornerShape(16.dp)),
shape = RoundedCornerShape(2.dp),
backgroundColor = DarkGray,
gravity = Alignment.CenterEnd) {
Text("$question",
style = typography.h4,
)
}
}
您可以在Text
申请textAlign = TextAlign.Center
:
Column(modifier = Modifier
.padding(30.dp)
.fillMaxWidth()
.wrapContentSize(Alignment.Center)
.clickable(onClick = { } ) /*question = "3 Bananas required"*/
.clip(shape = RoundedCornerShape(16.dp)),
) {
Box(modifier = Modifier
.preferredSize(350.dp)
.border(width = 4.dp, color = Gray, shape = RoundedCornerShape(16.dp)),
alignment = Alignment.Center) {
Text("Question 1 : How many cars are in the garage?",
Modifier.padding(16.dp),
textAlign = TextAlign.Center,
style = typography.h4,
)
关于正文。
您可以使用类似的东西:
var text by remember { mutableStateOf(("How many cars are in the garage?")) }
在您的可点击项目中:
.clickable(onClick = { text= "After clicking"} )
在您的文本中:
Text(text,
textAlign = TextAlign.Center,
...)
很简单。您可以使用动态结构来存储和更新值,而不是静态字符串。
您可以使用 textAlign
水平对齐文本,使用 wrapContentHeight
垂直对齐文本 Text
可组合
示例在 Text
中居中文本(水平和垂直)
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center, // make text center horizontal
modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan)
.wrapContentHeight() // make text center vertical
)
示例底部与中心水平对齐 Text
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center, // make text center horizontal
modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan)
.wrapContentHeight(Alignment.Bottom) // align bottom
)
示例在 Box
内将底部与水平中心对齐
Box(modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan),
contentAlignment = Alignment.BottomCenter
) {
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center
)
}
Box(contentAlignment = Alignment.Center, modifier = Modifier.fillMaxHeight())
{
Text(text = "Text"),
textAlign = TextAlign.Center,
}
我正在使用 Jetpack Compose 创建一个简单的闪存卡。 这个想法是你点击闪存卡,它会给你答案。 但是,我遇到了一个基本问题。
不幸的是...我什至找不到官方文档,所以我的学习风格一直相信自动更正系统...
无论如何,我认为问题出在 Box() 或 Text() 上。 我为盒子的重力添加了一个 Align.CenterEnd。然而,这似乎是就盒子而言居中的唯一方法。另一方面,Text() 没有给出任何方法来这样做(它有引力但它似乎没有改变任何东西)
方向正确的手会很棒。
附带说明一下,我知道这会提供免费答案。但是我如何在点击时更改 $question 的文本。正如我所想的那样,可组合项会刷新?...因此,应该在屏幕上重新生成吗?也许不是?
谢谢!
val typography = MaterialTheme.typography
val context = ContextAmbient.current
var question = "How many Bananas should go in my Smoothie?"
Column(modifier = Modifier.padding(30.dp).then(Modifier.fillMaxWidth())
.then(Modifier.wrapContentSize(Alignment.Center))
.clickable(onClick = { Toast.makeText(context, "3 Bananas are needed!", Toast.LENGTH_LONG).show()} ) /*question = "3 Bananas required"*/
.clip(shape = RoundedCornerShape(16.dp))) {
Box(modifier = Modifier.preferredSize(350.dp)
.gravity(align = Alignment.CenterHorizontally)
.border(width = 4.dp, color = Gray, shape = RoundedCornerShape(16.dp)),
shape = RoundedCornerShape(2.dp),
backgroundColor = DarkGray,
gravity = Alignment.CenterEnd) {
Text("$question",
style = typography.h4,
)
}
}
您可以在Text
申请textAlign = TextAlign.Center
:
Column(modifier = Modifier
.padding(30.dp)
.fillMaxWidth()
.wrapContentSize(Alignment.Center)
.clickable(onClick = { } ) /*question = "3 Bananas required"*/
.clip(shape = RoundedCornerShape(16.dp)),
) {
Box(modifier = Modifier
.preferredSize(350.dp)
.border(width = 4.dp, color = Gray, shape = RoundedCornerShape(16.dp)),
alignment = Alignment.Center) {
Text("Question 1 : How many cars are in the garage?",
Modifier.padding(16.dp),
textAlign = TextAlign.Center,
style = typography.h4,
)
关于正文。
您可以使用类似的东西:
var text by remember { mutableStateOf(("How many cars are in the garage?")) }
在您的可点击项目中:
.clickable(onClick = { text= "After clicking"} )
在您的文本中:
Text(text,
textAlign = TextAlign.Center,
...)
很简单。您可以使用动态结构来存储和更新值,而不是静态字符串。
您可以使用 textAlign
水平对齐文本,使用 wrapContentHeight
垂直对齐文本 Text
可组合
示例在 Text
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center, // make text center horizontal
modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan)
.wrapContentHeight() // make text center vertical
)
示例底部与中心水平对齐 Text
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center, // make text center horizontal
modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan)
.wrapContentHeight(Alignment.Bottom) // align bottom
)
示例在 Box
Box(modifier = Modifier
.width(150.dp)
.height(150.dp)
.background(Color.Cyan),
contentAlignment = Alignment.BottomCenter
) {
Text(
text = "How many cars are in the garage",
textAlign = TextAlign.Center
)
}
Box(contentAlignment = Alignment.Center, modifier = Modifier.fillMaxHeight())
{
Text(text = "Text"),
textAlign = TextAlign.Center,
}