F.G*_*.G. 5 android window-soft-input-mode android-jetpack-compose android-compose-textfield lazycolumn
我在 LazyColumn 内的 TextFields 遇到问题。
我的目标是拥有一个带有一堆 TextFields 的 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 中不常见吗?)
非常感谢您的帮助!:)
不确定这是否可以解决不同设备或组件版本上的问题,但就我而言,我可以使用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:
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |