Qt实现安卓沉浸式状态栏
Qt实现安卓沉浸式状态栏
笔者写写此篇文章的时候,Qt已经发布了Qt 6版本,相比Qt 5版本有很大改变。所以此篇文章基于Qt 6.2而写。沉浸式状态栏的具体的实现过程,笔者参考了Qt android 设置系统状态栏为全透明,半透明、全屏,设置状态栏颜色,修改程序图标这篇文章,这篇里面写的很详细了,这篇文章的作者使用的是Qt 5,笔者这里主要写与Qt 6的不同,顺便简化一下过程。
首先需要一个.java文件,使用Qt就可以新建一个.java文件,复制以下内容然后保存:
package an.qt.QtFullscreenActivityAPP;//指明文件包名
import android.content.Context;
import android.content.Intent;
import android.app.PendingIntent;
import android.util.Log;
import android.os.Bundle;
import android.os.Build;
import android.graphics.Color;
import android.view.WindowManager;
import android.view.View;
//继承 QtActivity 类
public class QtFullscreenActivity extends org.qtproject.qt.android.bindings.QtActivity
{
private final static String TAG = "QtFullscreen";
private static Context context;
@Override
// 重写 onCreate 方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 获取程序句柄
context = getApplicationContext();
// 设置状态栏颜色,需要安卓版本大于5.0
this.setStatusBarColor("#449042");
// 设置状态栏全透明
// this.setStatusBarFullTransparent();
}
//全局获取Context
public static Context getContext() {
return context;
}
//全透状态栏
private void setStatusBarFullTransparent()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏
// 状态栏字体设置为深色,SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 为SDK23增加
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
// 部分机型的statusbar会有半透明的黑色背景
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(Color.TRANSPARENT);// SDK21
}
}
// 非全透,带颜色的状态栏,需要指定颜色
private void setStatusBarColor(String color){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 需要安卓版本大于5.0以上
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.parseColor(color));
}
}
}
上面这个片段就摘自参考文章,不同的一点是这一句:
参考文章中这里是qt5,这就是版本的不同了,具体这里是什么,可以参考自己安装的Qt的版本的这个文件夹的路径:
代码片段中的路径要和实际的一致。然后把刚刚的.java文件复制到这个路径下面。
然后在Qt中打开AndroidManifest.xml这个文件,进入编辑模式,就修改一个地方:
把这里的android:name进行更改:
android:name=“an.qt.QtFullscreenActivityAPP.QtFullscreenActivity”
到这里再进行编译程序,就可以给状态栏改颜色了,在.java文件中可以自定义颜色以实现和App的背景一样。