如何将文本写入屏幕底部的 Lazycolumn 中的 TextFields

F.G*_*.G. 5 android window-soft-input-mode android-jetpack-compose android-compose-textfield lazycolumn

我在 LazyColumn 内的 TextFields 遇到问题。

我的目标是拥有一个带有一堆 TextFields 的 LazyColumn,我可以

  • 即使键盘处于活动状态,也可以滚动查看 LazyColumn 的全部内容
  • 在文本字段中输入新行并且该行不会被键盘隐藏
  • 输入文本并且键盘不会立即关闭

那是我的代码:

LazyColumn(
    modifier = Modifier.background(Color.Blue)
) {
    items(count = 20, key = { it }) {
        var text by remember { mutableStateOf("$it.") }
        OutlinedTextField(
            value = text,
            onValueChange = { text = it },
            modifier = Modifier
                .fillMaxWidth()
                .padding(2.dp)
                .background(Color.Gray)
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:

使用此代码时,当 TextField 位于列底部时,键盘将隐藏所有新行。您可以手动向下滚动并查看新行,但这不是理想的解决方案。另外,如果其下方有更多文本字段,它们将被隐藏,无法通过滚动到达,因此,如果我想先在 TextField 17 中输入文本,然后在 TextField 18 中输入文本,则必须在两者之间关闭键盘。

试图:

我尝试通过android:windowSoftInputMode="adjustResize"在 AndroidManifest 中进行设置来解决此问题,但是当我单击屏幕底部的 TextField 时,LazyColumn 会滚动并且键盘会关闭。

这里对此行为有一个很好的解释,建议是

现在,解决方法包括使用列,而不是惰性列;使用自定义惰性可组合项创建您自己的惰性列,并手动处理可组合项的堆大小,以便最终字段不会失去组合。

假设我有大量的 TextFields 并且无法使用 Column,那么还有其他方法可以创建自定义 LazyColumn 吗?

这听起来像是一种非常复杂的方法来解决我经常期望的问题(或者将 TextFields 放在 LazyColumns 中不常见吗?)

非常感谢您的帮助!:)

z.g*_*g.y 3

不确定这是否可以解决不同设备或组件版本上的问题,但就我而言,我可以使用adjustPan以下任一方法解决该问题

通过 AndroidManifest

android:windowSoftInputMode="adjustPan"
Run Code Online (Sandbox Code Playgroud)

或以编程方式

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
Run Code Online (Sandbox Code Playgroud)

相同的代码会产生以下输出adjustPan

在此输入图像描述