Qt on Android,输入法弹出后,界面无法自适应
来源:互联网 发布:怎样查看网络ip地址 编辑:程序博客网 时间:2024/06/06 08:36
界面被顶出屏幕
第一个遇到的问题是,在不对 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、微信聊天窗口。
如何获得软键盘的尺寸信息?
- Qt on Android,输入法弹出后,界面无法自适应
- 安卓弹出输入法后,界面变形
- Android AlertDialog 无法弹出输入法
- Android 输入法弹出框挡住界面问题
- Android 输入法弹出界面上移的问题
- Android AlertDialog中EditText无法弹出输入法
- QT 禁止输入法弹出
- Android输入法弹出刷新界面布局导致性卡顿
- android 输入法软件盘弹出遮挡原界面
- Qt on Android:创建可伸缩界面
- Qt on Android:创建可伸缩界面
- 【Android】防止UI界面被输入法遮挡(画面随输入法自适应)
- 【Android】防止UI界面被输入法遮挡(画面随输入法自适应)
- 【Android】防止UI界面被输入法遮挡(画面随输入法自适应) .
- 解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
- 解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
- 解决syszuxpinyin重复点击lineEdit无法弹出输入法界面和无法删除原有内容问题
- redhat系统使用xshell连接后无法弹出界面
- 理解AX InventTrans的几种状态
- windbg中的栈信息
- 最近被困扰的一个问题
- Cocos Studio的csb文件中clone列表子元素,但动画未随之克隆的分析
- 【原创】打磨 ——《软件随想录》的随想,以及墙裂推荐
- Qt on Android,输入法弹出后,界面无法自适应
- 类的构造方法调用几次的判定:
- java学习之Collections工具类
- 常用工具下载链接
- Linux系统函数open和close(04)---open函数错误信息获取
- fragment切换
- chrome浏览器被2345网页劫持,杀毒、删注册表等各种方法都解决不了
- NVIDIA CUDA系列视频教程
- android图表