void Wpp::__adjustResizeWindow() { int kbHeight = 280*wpp::qt::Wpp::getInstance().dp2px(); QWindow *window = QGuiApplication::focusWindow(); window->setHeight( window->height() - kbHeight ); qDebug() << __FUNCTION__ << ":resize-ok-to:" << window->size(); }
void Wpp::realOnKeyboardVisibleChanged() { #if defined(Q_OS_IOS) || defined(Q_OS_ANDROID) qDebug() << __FUNCTION__; //#ifdef Q_OS_IOS QScreen *screen = QGuiApplication::primaryScreen(); QWindow *window = QGuiApplication::focusWindow(); QInputMethod *inputMethod = QGuiApplication::inputMethod(); if ( inputMethod->isVisible() ) { if ( m_softInputMode == ADJUST_RESIZE && window != 0 && screen != 0 ) { #ifdef Q_OS_IOS QRectF kbRect = inputMethod->keyboardRectangle(); #endif #ifdef Q_OS_ANDROID /* Rect r = new Rect(); View rootview = this.getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); */ QAndroidJniObject visibleFrameRect("android/graphics/Rect","()V"); qDebug() << __FUNCTION__ << "visibleFrameRect.isValid()=" << visibleFrameRect.isValid(); QAndroidJniObject activity = QtAndroid::androidActivity(); qDebug() << __FUNCTION__ << "activity.isValid()=" << activity.isValid(); QAndroidJniObject androidWindow = activity.callObjectMethod( "getWindow","()Landroid/view/Window;"); qDebug() << __FUNCTION__ << "androidWindow.isValid()=" << androidWindow.isValid(); QAndroidJniObject rootview = androidWindow.callObjectMethod( "getDecorView","()Landroid/view/View;"); qDebug() << __FUNCTION__ << "rootview.isValid()=" << rootview.isValid(); //rootview.callMethod<void>("getWindowVisibleDisplayFrame","(Landroid/graphics/Rect;)V",visibleFrameRect.object<jobject>()); rootview.callMethod<jboolean>("getLocalVisibleRect","(Landroid/graphics/Rect;)Z",visibleFrameRect.object<jobject>()); qDebug() << __FUNCTION__ << "rootview.isValid()=" << rootview.isValid(); qDebug() << __FUNCTION__ << "visibleFrameRect.isValid()=" << visibleFrameRect.isValid(); jint visibleFrameTop = visibleFrameRect.getField<jint>("top"); qDebug() << __FUNCTION__ << "visibleFrameRect.visibleFrameTop=" << visibleFrameTop; jint visibleFrameLeft = visibleFrameRect.getField<jint>("left"); qDebug() << __FUNCTION__ << "visibleFrameRect.visibleFrameLeft=" << visibleFrameLeft; jint visibleFrameWidth = visibleFrameRect.callMethod<jint>("width","()I"); qDebug() << __FUNCTION__ << "visibleFrameRect.width()=" << visibleFrameWidth; jint visibleFrameHeight = visibleFrameRect.callMethod<jint>("height","()I"); qDebug() << __FUNCTION__ << "visibleFrameRect.height()=" << visibleFrameHeight; int keyboardHeight = 0; if ( screen != 0 ) { qDebug() << __FUNCTION__ << "screen.height()=" << screen->size().height(); keyboardHeight = screen->size().height() - visibleFrameHeight; qDebug() << __FUNCTION__ << "keyboardHeight=" << keyboardHeight; } QRectF kbRect(0, visibleFrameHeight, visibleFrameWidth, keyboardHeight);//assume keyboard from bottom side #endif qDebug() << __FUNCTION__ << "kbRect=" << kbRect; window->showNormal(); if ( window->height() == screen->size().height() ) { qDebug() << __FUNCTION__ << ":origSize=" << window->size(); Q_ASSERT( kbRect.width() == (qreal)window->width() );//assume keyboard appears from bottom side of app window window->setHeight( window->height() - kbRect.height() ); qDebug() << __FUNCTION__ << ":resize-ok-to:" << window->size(); } } } else { if ( m_softInputMode == ADJUST_RESIZE && window != 0 && screen != 0 ) { window->setHeight( screen->size().height() ); qDebug() << __FUNCTION__ << ":resize-ok-to:" << screen->size(); } window->showNormal(); } //#endif #endif }