界面被顶出屏幕

第一个遇到的问题是,在不对 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、微信聊天窗口。

如何获得软键盘的尺寸信息?

更多相关文章

  1. android中fitsSystemWindows的用处
  2. 【移动开发】 Android隐藏输入法软键盘的一些说明
  3. android Edittext输入修改软键盘并关闭软键盘
  4. ICS 系统栏分析(一)
  5. Android调用系统自带的设置界面
  6. 【Android(安卓)界面效果22】Android的Tab与TabHost
  7. android EditText软键盘隐藏总结
  8. android:windowSoftInputMode属性详解以及editText监听键盘回车
  9. Android(安卓)LCD和键盘 背光亮度数据流分析

随机推荐

  1. 使用python编写udp协议的ping程序
  2. 在Python 3.x中将多个字典写入多个csv文
  3. Python 全栈开发七 面向对象
  4. 《机器学习实战》使用Apriori算法和FP-gr
  5. Win7(64-bit)系统下的【Python3.6.0+open
  6. 如何在python 3中将单词转换为数字(自己的
  7. 【Python】Python脚本实现抢券
  8. 如何使用不同的类python在一个类中的一个
  9. 安装numpy+scipy+matlotlib+scikit-learn
  10. Linux或Linux虚拟机桥接模式使用Python2