79 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								## 注意点
							 | 
						|||
| 
								 | 
							
								隐藏状态栏时,第一个界面不能使用Qt设计师界面类(创建项目时,不勾选**创建界面**选项)。不然以下方法皆会无效。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 方法1
							 | 
						|||
| 
								 | 
							
								修改AndroidManifest.xml中activity的主题。即在`<activity>`标签中添加 `android:theme="@android:style/Theme.NoTitleBar.Fullscreen"`
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								以下为实例代码:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
							 | 
						|||
| 
								 | 
							
								          android:name="an.qt.helloQtQuickApp.QtFullscreenActivity"
							 | 
						|||
| 
								 | 
							
								          android:label="-- %%INSERT_APP_NAME%% --"
							 | 
						|||
| 
								 | 
							
								          android:screenOrientation="unspecified"
							 | 
						|||
| 
								 | 
							
								          android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
							 | 
						|||
| 
								 | 
							
								          android:launchMode="singleTop">
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								如果无效,则需要重写QtActivity的onCreate函数。
							 | 
						|||
| 
								 | 
							
								大致步骤如下:
							 | 
						|||
| 
								 | 
							
								1. 在项目目录\android\src\目录下创建与包名相同的目录。例如:我们要创建的包为an.qt.helloQtQuickApp,那么路径为an\qt\helloQtQuickApp。并创建一个Java文件,用于定义我们的Activity。文件名可以随便取,我这里的文件名设为QtFullscreenActivity.java。
							 | 
						|||
| 
								 | 
							
								2. 修改AndroidManifest.xml文件,使用我们刚才新定义的Activity。
							 | 
						|||
| 
								 | 
							
								将` <manifest>` 标签中的package改成我们创建的包名。将`<activity>`标签中android:name改成an.qt.helloQtQuickApp.QtFullscreenActivity,即包名.新创建的Activity类名。
							 | 
						|||
| 
								 | 
							
								>Java文件代码如下:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								package an.qt.helloQtQuickApp;
							 | 
						|||
| 
								 | 
							
								import android.content.Context;
							 | 
						|||
| 
								 | 
							
								import android.content.Intent;
							 | 
						|||
| 
								 | 
							
								import android.app.PendingIntent;
							 | 
						|||
| 
								 | 
							
								import android.util.Log;
							 | 
						|||
| 
								 | 
							
								import android.os.Bundle;
							 | 
						|||
| 
								 | 
							
								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);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								详细操作过程可以参看安晓辉的blog:
							 | 
						|||
| 
								 | 
							
								https://blog.csdn.net/foruok/article/details/38265349
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 方法2
							 | 
						|||
| 
								 | 
							
								大致思路如下:使用Qt5.7后,在QtAndroid类新增了一个静态函数:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								void QtAndroid::runOnAndroidThread(const QtAndroid::Runnable &runnable)
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								通过它调用以下Java代码:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								Activity activity = (Activity) mContext;
							 | 
						|||
| 
								 | 
							
								View decorView = activity.getWindow().getDecorView();
							 | 
						|||
| 
								 | 
							
								decorView.setSystemUiVisibility(
							 | 
						|||
| 
								 | 
							
								       View.SYSTEM_UI_FLAG_IMMERSIVE
							 | 
						|||
| 
								 | 
							
								        | 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
							 | 
						|||
| 
								 | 
							
								        | View.SYSTEM_UI_FLAG_FULLSCREEN);
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								这种方法的好处在于,可以在运行时控制是否隐藏状态栏,而且不用改AndroidManifest.xml文件,移植方便。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								详细操作可以见作者Blog:
							 | 
						|||
| 
								 | 
							
								https://blog.csdn.net/jun4331247/article/details/80739662
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								项目Github:
							 | 
						|||
| 
								 | 
							
								https://github.com/WingNan/QtAndroidFullScreen
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 移植步骤
							 | 
						|||
| 
								 | 
							
								1. 复制文件jfullscreen.h、jfullscreen.cpp至你的项目目录。复制android/src目录及其内部文件至项目同名目录。
							 | 
						|||
| 
								 | 
							
								2. 在项目上右键点击“添加现有文件",将以上几个文件添加到项目中。
							 | 
						|||
| 
								 | 
							
								3. 编辑项目文件(*.pro),添加androidextras模块(在Qt+=core gui后面加上androidextras)
							 | 
						|||
| 
								 | 
							
								4. 在app的第一个widget中#include "jfullscreen.h",并在构造函数中加入:
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								JFullScreen *pManager = new JFullScreen;
							 | 
						|||
| 
								 | 
							
								pManager->fullScreenStickyImmersive();
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								注意:创建项目时不能勾选“创建界面”选项,并且第一个widget不能使用设计师界面类来创建!
							 |