Qt on Android,输入法弹出后,界面无法自适应
2015-09-18 14:33
507 查看
界面被顶出屏幕
第一个遇到的问题是,在不对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 Studio系列教程二--基本设置与运行
- android极光推送
- android在线下载并安装APK
- android小知识
- android适配
- Android 常用工具类源码大全
- android-6.0-23的getColor过时
- Android横竖屏切换总结
- Android保存图片到系统图库
- 详解Android中AsyncTask的使用
- Android图形---硬件加速(Hardware Acceleration)(二)
- Android 安全方面知识汇总
- Android图形---硬件加速(Hardware Acceleration)(一)
- android 美化zxing二维码扫描框
- 安卓(android)开发应该怎么学?需要哪些基础知识?
- Android小结(各种系统信息,界面等获取方法)
- Android软键盘遮挡的四种解决方案
- Android源码开发之来电接听振动
- Android Paint
- greenDao的使用--- 配置 androidstudio