Qt实现安卓沉浸式状态栏

本文介绍了如何在Qt6.2版本下实现安卓应用的沉浸式状态栏,主要区别于Qt5的实现方式,并提供了详细的步骤。通过创建一个.java文件并修改AndroidManifest.xml,实现了状态栏颜色自定义及透明效果,适用于Android 5.0及以上版本。
摘要由CSDN通过智能技术生成

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的背景一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值