Jetpack Compose 如何在 BasicTextField 中居中提示和输入

时间:2021-06-04 07:13:36

标签: android android-jetpack-compose android-jetpack-compose-text

我正在尝试制作一个填充屏幕宽度的 editText,它的提示和输入从屏幕中心开始。

我选择 BasicTextField,因为 TextField 和 OutlinedTextFields 的样式对我来说完全没有必要。

我试过这样做。

      BasicTextField(
                value = loginId,
                onValueChange = {
                    loginId = it
                },
                decorationBox = {
                     Text(text = "Input your id", modifier = Modifier.align(Alignment.CenterHorizontally).fillMaxWidth())
                },
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(start = 19.dp,
                        bottom = 4.5.dp, end = 19.dp, top = 40.dp)
                    .background(Purple200)
                    .align(Alignment.CenterHorizontally),
            )

这没有效果。我可以用它做什么?

2 个答案:

答案 0 :(得分:2)

您可以将 TextAlign.Center 应用到您的 Text。您可以使用 styletextAlign 属性。 类似的东西:

Text(text = "Input your id",
                modifier = Modifier.fillMaxWidth(),
                style = LocalTextStyle.current.copy(textAlign = TextAlign.Center))

或:

 Text(text = "Input your id",
                    modifier = Modifier.fillMaxWidth(),
                    textAlign = TextAlign.Center)

enter image description here

同样要正常工作,因为您使用的是 decorationBox,所以您必须在 innerTextField 中只调用一次 decorationBox。 类似的东西:

 decorationBox = {  innerTextField ->
        //....
        if (loginId.isEmpty()) {
            Text("....")
        }
        innerTextField()  //<-- Add this
  }

答案 1 :(得分:0)

Text Composable 具有 textAlign 参数,因此您可以使用此参数简单地将文本居中:

Text(text = "Input your id",
     textAlign = TextAlign.Center,
)

enter image description here

参考:https://developer.android.com/jetpack/compose/text#text-alignment