【问题标题】:DecorationBox in Jetpack Compose BasicTextFieldJetpack Compose BasicTextField 中的装饰框
【发布时间】:2021-04-09 09:58:10
【问题描述】:

我使用 jetpack compose 创建了一个 editText,我想显示一个类似于“android:hint”之前的提示, 所以我尝试使用装饰框,但是在我创建它之后,输入没有显示,日志可以显示我的输入内容。 这是我的代码,

val passState= remember { mutableStateOf(TextFieldValue("")) }
BasicTextField(
    decorationBox = {
        Text("password",color = loginGrayColor)
    },
    value = passState.value,
    onValueChange = { passState.value = it ; Log.d("password",it.text) },
    singleLine = true,
    maxLines = 1,
    textStyle = TextStyle(
        fontSize = 15.sp,
        color = loginInputTextColor
    ),
    modifier = Modifier
        .padding(start = 10.dp, top = 10.dp)
        .height(20.dp)
)

【问题讨论】:

  • 有理由使用BasicTextField 而不是TextField ?

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


【解决方案1】:

您必须添加decorationBox提供的innerTextField
比如:

var value by remember { mutableStateOf(TextFieldValue("")) }
BasicTextField(
    value = value,
    onValueChange = { value = it },
    decorationBox = { innerTextField ->
        Row(
            Modifier
                .background(Color.LightGray, RoundedCornerShape(percent = 30))
                .padding(16.dp)
        ) {

            if (value.text.isEmpty()) {
                Text("Label")
            }
            innerTextField()  //<-- Add this
        }
    },
)

【讨论】:

  • 如果您想让光标从占位符标签的开头开始,请将 decorationBox 的内容放在 Box 而不是 Row 中
猜你喜欢
  • 2022-01-03
  • 2021-07-07
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
  • 2023-03-02
  • 1970-01-01
相关资源
最近更新 更多