Android 键盘覆盖 Qml TextField
Posted
技术标签:
【中文标题】Android 键盘覆盖 Qml TextField【英文标题】:Android keyboard is covering Qml TextField 【发布时间】:2021-09-19 16:08:52 【问题描述】:我有一个Dialog
,其中包含一个ListView
的页眉、页脚和内容项:
Dialog
width: 200
height: 200
x: 10
y: 100
header: Rectangle
contentItem: ListView
delegate: TextField
// this is covered by the android keyboard
footer: Rectangle
在 ios 上,整个屏幕向上移动,因此拥有文本光标的 ListView 的 TextField
(https://doc.qt.io/qt-5/qml-qtquick-controls2-textfield.html) 始终可见。在 Android 上,TextField
的光标被 Android 键盘覆盖。我已经尝试在AndroidManifest.xml
中设置android:windowSoftInputMode="adjustResize"
,但没有成功。
有没有一种简单的方法可以确保当前拥有光标的TextField
始终可见?还是手动移动 Dialog 的 y 坐标的唯一解决方案?
带有隐藏键盘的 Qml:
Qml 键盘隐藏光标:
常规 Android 文本字段:
当键盘打开时,常规的 Android 文本字段会向上移动:
问候,
【问题讨论】:
好像是bug,我创建了issue in bug tracker 【参考方案1】:整个文本视图?不,这不是键盘在 Android 中的工作方式。您拥有的唯一杠杆是 softInputMode,它可以平移或调整大小。在平移模式下,屏幕向上滚动以使光标始终可见(但文本视图的其余部分可能不可见)。在调整大小模式下,应用程序在键盘上方的空间中调整大小,然后在需要时移动以使光标可见。如果您在屏幕上有空白空间并且您的布局设置为可以很好地缩放(登录屏幕经常受益),这有时可以使更多的屏幕可见。但是无法确保整个文本视图或任何其他字段仍在屏幕上。这不是 Android 的工作方式。
【讨论】:
光标可见(即不被键盘覆盖)就足够了。但我无法使用 QmlTextField
.
那你看到了什么?画面是不是完全不动?这听起来像“adjustNone”模式,尽管使用它非常罕见,但确实存在。值得检查以确保在运行时 softInputMode 是它应该是的。但除此之外,你无能为力。甚至没有办法知道键盘何时可靠地启动和关闭。
我添加了一些屏幕截图显示:Qml 与关闭键盘,Qml 与键盘覆盖文本字段与正确移动字段以使其保持可见的常规 Android 控件相比。以上是关于Android 键盘覆盖 Qml TextField的主要内容,如果未能解决你的问题,请参考以下文章