我昨天调试了一下,找到了Android的Layout Information。特别是ActionBar。
但问题没有解决。
具体是这样的:
利用QTextEdit的focusOutEvent, 利用QtNative::activity, 再找ActionBar。
void PlainTextEdit_Menu::focusOutEvent(QFocusEvent *event)
{
QPlainTextEdit::focusOutEvent(event);
#ifdef Q_OS_ANDROID
if (mainWindow) {
if (mainWindow) {
void androidActionBarHide();
void androidActionBarShow();
qDebug() << "androidActionBarHide() called";
//androidActionBarHide();
androidActionBarShow();
}
}
#endif
}
void androidActionBarHide()
{
QAndroidJniObject::callStaticObjectMethod("info/suanchou/math/suanchou/Util",
"androidActionBarHide",
"()V");
}
void androidActionBarShow()
{
QAndroidJniObject::callStaticObjectMethod("info/suanchou/math/suanchou/Util",
"androidActionBarShow",
"()V");
}
---------------------------------------
static void androidActionBarHide() {
Log.w("Suanchou", "androidActionBarHide");
Activity activity = org.qtproject.qt5.android.QtNative.activity();
ActionBar bar = activity.getActionBar();
Log.w("Suanchou", "Tab count = " + bar.getTabCount());
bar.hide();
//View view = activity.getView();
//view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
Log.w("Suanchou", "androidActionBarHide exit");
//view.performClick();
}
static void androidActionBarShow() {
Log.w("Suanchou", "androidActionBarShow");
Activity activity = org.qtproject.qt5.android.QtNative.activity();
ActionBar bar = activity.getActionBar();
bar.show();
View view = activity.getCurrentFocus();
if (view == null) {
Log.w("Suanchou", "view is null");
return;
}
Log.w("Suanchou", "view " + view.toString());
ViewParent p = view.getParent();
ViewParent child = p;
while (p != null && p.getParent() != null) {
Log.w("Suanchou", "viewParent: " + p.toString());
child = p;
p = p.getParent();
}
Log.w("Suanchou", "out of loop");
Rect rect = new Rect(0, 0, 3000, 500);
//p.invalidateChild(child, rect);
p.requestLayout();
Log.w("Suanchou", "androidActionBarShow exit");
}
现在的问题是:让Android repaint ActionBar。我对Android也不太熟,代码中是胡乱试试的。
有谁对Android的Layout比较熟悉,解释一下,怎么repaint ?
已有的信息是TabCount是0,这个也比较奇怪。