BlueRoseNote/07-Other/Qt/Qt On Android 隐藏状态栏的方法.md
2023-06-29 11:55:02 +08:00

79 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 注意点
隐藏状态栏时第一个界面不能使用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不能使用设计师界面类来创建