【问题标题】:Resizeable BasicTextField in Jetpack ComposeJetpack Compose 中可调整大小的基本文本字段
【发布时间】:2021-05-27 10:08:18
【问题描述】:

有没有办法在 Jetpack Compose 中生成一个可调整大小的 BasicTextField,以便在用户输入或删除字符时它的宽度会换行文本大小?他们已经解决了类似的颤振问题,但我没有找到如何为 Compose 解决这个问题。 Flutter - how to make TextField width fit its text ("wrap content")

var text: String by rememberSaveable { mutableStateOf("") }
BasicTextField(
   value = text,
   onValueChange = {
       text = it
   },
   modifier = Modifier.wrapContentWidth()
)

很遗憾,wrapContentWidth() 在这里不起作用。

【问题讨论】:

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


    【解决方案1】:

    嗯,看来width(IntrinsicSize.Min) 解决了这个问题:

    var text: String by rememberSaveable { mutableStateOf("") }
    BasicTextField(
       value = text,
       onValueChange = {
           text = it
       },
       modifier = Modifier.width(IntrinsicSize.Min)
    )
    

    【讨论】:

    • 这确实有效。你救了我!
    【解决方案2】:

    我们可以指定宽度范围(textField可以跨越的最小和最大宽度)

    对于宽度:-

    modifier = Modifier.widthIn(1.dp, Dp.Infinity) // specified the min width as 1.dp
    

    高度:-

    modifier = Modifier.heightIn(1.dp, Dp.Infinity) 
    

    可组合代码:-

    Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
         OutlinedTextField(
            value = text,
            onValueChange = {
               text = it
            },
            modifier = Modifier.widthIn(1.dp, Dp.Infinity)
         )
    }
    

    当我们输入更多直到Dp.Infinity 时,TextField 会增长。 (使用OutlinedTextField 进行演示,但我们可以使用BasicTextField

    【讨论】:

    • 太棒了,这很有帮助!
    • 但是还是有问题。看起来您使用的 min = 1.dp 永远无法联系到。如果大纲包含少于 10 个字符,则大纲比文本大得多,TextField 可能具有固定的最小宽度......我需要摆脱它
    • 当你输入一些值时它可以工作,但是当你删除字符时你有一个 minWidth >1.dp。
    • 是的,默认情况下它始终保持最小尺寸,之后其可调整大小。
    • 好的,那我怎么把这个默认的minSize改成10.dp左右呢? @SantanuSur
    猜你喜欢
    • 2021-11-01
    • 2021-05-16
    • 1970-01-01
    • 2015-05-03
    • 2022-11-20
    • 2015-05-13
    • 2022-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多