LazyColumn 中的 TextField IME 填充,撰写

Waq*_*hir 6 android android-jetpack-compose

问题: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)
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,盒子上有 navigationBarsWithImePadding,但它不起作用,因为文本位于键盘下方,我尝试在 LazyColumn 上设置修饰符,但随后它提供了 LazyColumn 相对于框外其他项目的填充!

所以我试过了 contentPadding

LazyColumn(contentPadding=insets.ime.toPaddingValues(additionalBottom=insets.navigationBars.bottom.dp)) {
    items(editor.blocks) { block ->
        RenderBlock(block)
    }
}
Run Code Online (Sandbox Code Playgroud)

再次不起作用,因为内容填充应用于最后一项/或其后,键盘位于文本上方

用简单的 Column 替换 LazyColumn 并使用verticalScroll修饰符会导致同样的问题,因为列表可以长垂直滚动成为需要

Hal*_*fax 3

如果您使用Column,可以参考以下代码片段:

Column(
    modifier = Modifier
        // other modifiers
        .verticalScroll(scrollState, reverseScrolling = true)
        .navigationBarsWithImePadding(),
    verticalArrangement = Arrangement.Bottom,
)
Run Code Online (Sandbox Code Playgroud)