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 的工作方式。

【讨论】:

光标可见(即不被键盘覆盖)就足够了。但我无法使用 Qml TextField. 那你看到了什么?画面是不是完全不动?这听起来像“adjustNone”模式,尽管使用它非常罕见,但确实存在。值得检查以确保在运行时 softInputMode 是它应该是的。但除此之外,你无能为力。甚至没有办法知道键盘何时可靠地启动和关闭。 我添加了一些屏幕截图显示:Qml 与关闭键盘,Qml 与键盘覆盖文本字段与正确移动字段以使其保持可见的常规 Android 控件相比。

以上是关于Android 键盘覆盖 Qml TextField的主要内容,如果未能解决你的问题,请参考以下文章

android 动态改变界面 软键盘覆盖了界面

Nativescript Vue Android 键盘覆盖 TextView 或键盘覆盖操作栏

如何处理覆盖固定元素的Android键盘?

Android软键盘覆盖EditText字段

Android软键盘弹出,覆盖h5页面输入框问题

Android软键盘弹出,覆盖h5页面输入框问题