假设我有一些包含jetpack的活动-编写内容
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ScrollableColumn(
modifier = Modifier
.fillMaxSize()
.border(4.dp, Color.Red)
) {
val (text, setText) = remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = setText,
label = {},
modifier = Modifier
.fillMaxWidth()
)
for (i in 0..100) {
Text("Item #$i")
}
}
}
}
}
如果我启动此活动并将焦点放在TextField上,则会弹出一个软件键盘。
但是,接口不会对此做出React。ScrollableColumn的下边框(.border(4.dp, Color.Red)
)和第100项(Text("Item #$i")
)将不可见。
换句话说,软键盘与内容重叠。
我怎样才能使jetpack组合尊重可见区域的变化(由于软键盘)?
8条答案
按热度按时间58wvjzkj1#
您可以使用标准的android程序,但我不知道是否存在特定的合成方式。
如果将SoftInputMode设置为
SOFT_INPUT_ADJUST_RESIZE
,则布局将根据键盘更改调整大小。否则,您可以使用清单中的标志。有关详细信息,请参阅此处:Move layouts up when soft keyboard is shown?
wztqucjr2#
您可以使用伴奏者的插图库https://google.github.io/accompanist/insets
首先在可组合层次结构的根位置使用 ProvideWindowInsets(大多数情况下位于应用主题下方)compose并将 windowInsetsAnimationsEnabled 设置为true
在文本字段上使用 navigationBarsWithImePadding() 修饰符
最后,确保从Activity(在 onCreate 内)调用 WindowCompat.setDecorFitsSystemWindows(window,false)。如果您希望软件键盘打开/关闭以设置动画,请在AndroidManifests中设置Activity的 *windowSoftInputMode**adjustResize
3df52oht3#
我也面临同样的问题。
使用
OnGlobalLayoutListener
,它将观察实际IME矩形大小,并在软键盘完全可见时触发。对我有效的解决方案:
此处为原点
kyxcudwk4#
我 想出 了 使用 伴奏 插图 库 的 主意 。
有人 可能 会 感 兴趣 , 因为 我 的 方法 * * 不会 修改 * * 应用 程序 的 内容 。
我 在 下面 链接 我 的 帖子 :
( 撰写 UI ) - 键盘 ( IME ) 与 应用 程序 内容 重叠
lvjbypge5#
除了Compose之外,现在还不需要外部库。在清单文件中的Activity上设置
android:windowSoftInputeMode=true
例如:
然后,对于您希望UI对其作出React的可组合对象,可以使用
Modifier.imePadding()
,它对IME可见性作出Reactc8ib6hqw6#
如果你想让你的文本字段在键盘出现时向上滚动。下面的方法对我很有效。你需要添加这些
并将其添加到您的app/build.gradle
6uxekuva7#
在我的例子中,只需将
android:windowSoftInputMode="adjustResize"
添加到Activity中就足以解决问题。这取决于你如何构建你的UI。如果你的屏幕的根是一个垂直滚动的容器或Box,键盘的大小可能会被自动管理。
mbjcgjjk8#
使用修饰符
imePadding()
。这将允许特定的组合在键盘弹出时进行自我调整。这不需要您在Activity上设置任何标志