【发布时间】:2021-04-17 14:02:26
【问题描述】:
问题:TextField(惰性列内)文本位于键盘下方
说明:
我有一个包含显示文本字段的项目列表的 LazyColumn,在清单中,活动有 windowSoftInputMode="adjustResize",我还设置了标志 WindowCompat.setDecorFitsSystemWindows(window,false)在 setContent 之前的 onCreate 方法中,我想让文本始终出现在键盘上方以获得更流畅的编辑体验!
使用提供 Window Insets 的 Accompanist Library 像这样为 Box 提供填充
Box(modifier = Modifier.weight(1f).navigationBarsWithImePadding()){
LazyColumn() {
items(myItems) { item->
ItemComposable(item)
}
}
}
如您所见,框上有 navigationBarsWithImePadding,但由于文本位于键盘下方,它不起作用,我尝试在 LazyColumn 上设置修饰符,但随后它提供了 LazyColumn 相对于其他项目之外的填充盒子!
所以我尝试了contentPadding
LazyColumn(contentPadding=insets.ime.toPaddingValues(additionalBottom=insets.navigationBars.bottom.dp)) {
items(editor.blocks) { block ->
RenderBlock(block)
}
}
再次没有用,因为内容填充应用于最后一项/或之后,键盘在文本上方
将 LazyColumn 替换为简单的 Column 并使用 verticalScroll 修饰符会导致同样的问题,因为列表可以很长,因此需要垂直滚动
可能的解决方案
val bringIntoViewRequester = remember { BringIntoViewRequester() }
TextField(
modifier = Modifier
.fillMaxWidth()
.bringIntoViewRequester(bringIntoViewRequester),
value = name,
onValueChange = {
name = it
scope.launch {
relocationRequestor.bringIntoView()
}
}
)
【问题讨论】:
标签: android android-jetpack-compose