Qt on Android,输入法弹出后,界面无法自适应
16lz
2021-01-24
界面被顶出屏幕
第一个遇到的问题是,在不对 AndroidMainifest.xml
修改情况下,当界面中有输入框,且位于屏幕底部,在弹出输入框的时候,顶部的工具栏被顶出界面。
在查阅安卓接口之后,你在 AndroidMainifest.xml
中的 activity
标签添加了 android:windowSoftInputMode="adjustUnspecified"
。
< activity android:windowSoftInputMode="adjustResize" ...>
由于 Qt on Android 的实现问题,在 Window
的大小调整的时候,会闪烁。( Qt on Android 中,不宜多窗体,在窗体之间切换的时候,会僵死,但是对话框可以使用)。
界面缩放的时候闪屏
经上述设置后,你发现,在弹出输入法的时候,界面可以很好适应,工具栏不会被顶出屏幕,但是,在输入法弹出的时候,界面窗体的大小被调整,所以会闪烁,并且很鬼畜。
解决
首先查看 Sparrow,以及简单易用的页面栈框架。这两篇文章,讲明了 QtQuick.Control 上 ApplicationWindow 的工具栏无法在安卓应用下灵活使用。
使用了 Sparrow,之后,页面中的工具栏可以自由的指定位置。
接下来就是,在安卓中,获取键盘高度。将获取的高度作为页面中 topBar 位移的大小。
一下为java代码,在activity中获取键盘高度的代码。
public static void listenKeyboardHeight() { if(!hasListenVirtualKeyboard) { final View myRootView = getRootView(m_instance); myRootView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect outRect = new Rect(); m_instance.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect); m_keyboardRectangle = new Rect(); myRootView.getWindowVisibleDisplayFrame(m_keyboardRectangle); int screenHeight = myRootView.getRootView().getHeight(); // 小于100 就不行了 // 这里还要减去状态栏的高度 // 魔幻数字 int magic = 5; int virtualKeyboardHeight = screenHeight - (m_keyboardRectangle.bottom - m_keyboardRectangle.top) - outRect.top - magic; if( virtualKeyboardHeight < 100 ) { virtualKeyboardHeight = 0; } QtNative.notifiedKeyboardRectangle( m_keyboardRectangle.centerX(), m_keyboardRectangle.centerY(), m_keyboardRectangle.width(), virtualKeyboardHeight); } }); hasListenVirtualKeyboard = true; } }
获取键盘高度,通过调用
QtNative.notifiedKeyboardRectangle( m_keyboardRectangle.centerX(), m_keyboardRectangle.centerY(), m_keyboardRectangle.width(), virtualKeyboardHeight);
这个代码通知 c++ 这边,键盘大小改变了。
就可以在 qml 中获取到键盘高度了。
实际应用在 WellChat。中有完整代码。
Android获取屏幕高度、状态栏高度、标题栏高度
Android 如何实现在隐藏键盘后,让输入框保持当前高度,类似QQ、微信聊天窗口。
如何获得软键盘的尺寸信息?
更多相关文章
- android中fitsSystemWindows的用处
- 【移动开发】 Android隐藏输入法软键盘的一些说明
- android Edittext输入修改软键盘并关闭软键盘
- ICS 系统栏分析(一)
- Android调用系统自带的设置界面
- 【Android(安卓)界面效果22】Android的Tab与TabHost
- android EditText软键盘隐藏总结
- android:windowSoftInputMode属性详解以及editText监听键盘回车
- Android(安卓)LCD和键盘 背光亮度数据流分析