項目用到QT qml,需要在android下面全屏顯示,折騰了一晚上,搞定,分享下,希望能幫助他人。
參考
Qt on Android:讓 Qt Widgets 和 Qt Quick 應用全屏顯示
該解決方案一定環境下不完美,比如台電P70上就只是隱藏了通知區,沒有隱藏虛擬按鍵區
想來廣大奔赴安卓開發第一線的一定有遇到,就換了個思路尋找結果,附上最終成果
package com.game.XXXXX;
import android.content.Context;
import android.content.Intent;
import android.app.PendingIntent;
import android.util.Log;
import android.os.Bundle;
import android.view.View;
import android.view.MotionEvent;
import android.view.WindowManager;
public class QtFullscreenActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
private final static String TAG = "QtFullscreen";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
return super.dispatchTouchEvent(ev);
}
}
注意
package com.game.XXXXX;
這里要保證包名完全一致,路徑也無誤,否則會出錯- java文件編碼可以采用utf-8 gbk,但是注意如果utf-8格式不能有BOM
基本原理就是整合了博客里面的方案,另外處理了“獲取焦點”和“觸控事件”時,隱藏掉虛擬按鍵和其他,達到比較完美全屏
遺憾:
“觸控事件”是為了處理,用戶點擊textedit調用虛擬鍵盤后,虛擬按鍵不隱藏情況,再次點擊屏幕即可隱藏,本人對android開發不熟悉,希望有其他更好的事件通知