Qt 5.9 for Android 实现沉浸式状态栏

  Android 手机应用程序如果不全屏,系统默认的顶部状态栏的颜色(黑色)会破坏精心设计的 APP 的整体风格和美感,所以,对状态栏的处理,个人觉得还是很有必要的。

  在 Qt 5.9 中,使用 QML声明式语言, 通过 Screen 对象来获取到设备的长宽,可以分别获取到整个设备的长宽和去掉手机顶部状态栏之后的长宽,可以说非常方便吧,但是,当你设置整个 Windows 对象或者ApplicationWindow 对象的长宽为设备的最大长宽的时候,会发现并不能生效,状态栏屹立不倒,忘了说了,这个沉浸式状态栏只有在 Android 4.4 及以上版本才会有效,4.4 以下的根本不支持,所以各位要注意自己的调试设备的系统版本。

  我在做这个的时候,在网上搜索了很多博客,有一部分说的是利用 Screen 获取长宽后全屏,然后,上方放置一个透明的矩形之类的,这个方法在 Qt 5.9 下面没能成功,因为根本都无法全屏,再者,全屏了之后,状态栏是会被影藏的,就算你设置了透明也看不到了吧,这个方式 Pass !

  第二种是通过 AndroidManifest.xml 设置 style ,先在 android/res 文件夹下添加 style 文件,然后在 AndroidManifest.xml 引用,style 文件里面设置

  android:windowTranslucentStatus 属性为 true,再设置

  android:fitsSystemWindows 属性为 true, 然后就就就就就就就就行了,因为这个已经是在利用 Android 系统本身的东西来设置了,几乎脱离了 Qt,感觉还是很靠谱的,但是,我还是失败了。难受...

  以上两种方式,有兴趣的朋友可以自己先试试看,也许是我的打开方式不对呢,万一你就成功了呢!

  最后呢,我想到了 JNI ,Android 系统是由 Java 实现的,我直接通过 Java 代码来实现这个东西,理论上是绝对可行的啊,所以,我建立了 Androidmanifest.xml 之后,添加了我自己编写的 Java 文件,在文件中,重载了 Android 系统程序的入口函数 onCreate() ,代码如下:

    @Override
    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          //getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
          getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

其实什么都没有,就是一句话的事,然后程序就自动全屏了,状态栏也透明了,效果如下图:

  这种方式是我在 Android 开发者博客上偷来的,感觉都是 Andoid 开发,都差不多,问我为什么? 母鸡~~~这个方式我想想其实和设置 style 是一样的道理,至于为什么我设置 style 失败,不清楚,诸位可以自己试试,如果成功,就可以不用添加 Java 文件了,挺好的....

  最后,这个东西其实不叫沉浸式状态栏,沉浸式其实是那种全屏游戏的那种,整个屏幕都是窗口的那种,这个叫法都是因为人云亦云,官方没有给出确切的名称,开发者就随便取的名字,不过,不重要了,鸡蛋好吃,没必要知道母鸡的名字,更没必要知道这个蛋排行老几~~~

  对这个东西还有问题的老铁,可以留言,我会看到会及时回复,就这样,Bye~~~


				
时间: 2024-08-04 04:24:59

Qt 5.9 for Android 实现沉浸式状态栏的相关文章

Android 中沉浸式状态栏实现

Android 中沉浸式状态栏实现方式如下 计算状态栏高度及调用沉浸式状态栏的相关API方法 1 package com.example.status; 2 import android.annotation.TargetApi; 3 import android.app.Activity; 4 import android.content.Context; 5 import android.os.Build; 6 import android.view.View; 7 import andro

81.Android之沉浸式状态栏攻略

转载:http://blog.csdn.net/lmj623565791/article/details/48649563/ 一.概述 近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图: 关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 ?透明栏?(Translucent Bars)称作 ?沉浸式顶栏??上面了解了解,请勿指点我说的博文标题起得不对,thx. 恩,接下来正题. 首先只有大

Android App 沉浸式状态栏解决方案

伴随着 Android 5.0 发布的 Material Design,让 Android 应用告别了以前的工程师审美,迎来了全新的界面,灵动的交互,也让越来越多的 App 开始遵从 material design 设计原则,不再是以前拿着iOS设计稿,做着Android开发.本文就其中的沉浸式状态栏这一特性,描述其兼容到4.4的实现,以及一些使用中的小细节. 前言 在4.4之前状态栏一直是黑色的,在4.4中带来了 windowTranslucentStatus 这一特性,因此可以实现给状态栏设

Android 实现沉浸式状态栏

上一篇文章将Android 实现变色状态栏我们实现了变色的状态栏,也介绍了沉浸式状态栏和透明状态栏的区别,这篇文章我们实现沉浸式状态栏. 沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了.于是沉浸模式成了沉浸式状态栏. 我们先来看下具体的效果 开启沉浸模式后,状态栏消失,从顶部向下滑动,状态栏出现,退出沉浸模式,状态栏也出现了. 我们的代码基于前一篇文章.首先是两个开启沉浸模式和关闭沉浸模式的函数 @SuppressLint("NewApi"

Android设置沉浸式状态栏时改变状态栏的颜色(只对MIUI V6可用)

Android支持在API 19及以上使用沉浸式状态,但在MIUI V6下如果扩展的颜色比较浅,会导致状态栏的文字无法看清. 在Android4.4设备上支持沉浸式状态栏,只需要添加values-v19/styles.xml 下添加 <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:window

android沉浸式状态栏实现

传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别.这样就在一定程度上牺牲了视觉宽度,界面面积变小. 沉浸模式的状态栏和主界面完全融为了一体,在设计上有不同的视觉感受. 我们先上两张图,很容易看出区别:        Android在4.4的时候增加了透明状态栏与导航栏的功能,依托于这个新特性,我们可以开始跟随潮流,实现Android的沉浸式状态栏 其实上图展示的这个关于界面的代码非常简单 /** * 关于界面 * * @author SuS * @time 2015.07.29

沉浸式状态栏 设置状态栏颜色

方式一:使用系统API 这个特性是andorid4.4支持的,最少要api19才可以使用. 1.隐藏标题栏等 在代码中设置 requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//窗口透明的状态栏 getWindow().addFlags(WindowManager.LayoutParams.FL

Android 沉浸式状态栏

效果图 android 5.0 以上 android 4.4 API 19 以上都是原生安卓系统的效果,具体到国内的各种各样改过的系统可能会有细微差别,测试过小米和华为的机器效果基本一样. 实现 1.修改主题属性 方法一: 在values-v19文件夹下声明AppTheme为透明状态栏,代码如下 1 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 2 <!-- C

Android 沉浸式状态栏 实现方式二 ( 更简单 )

以前写过一个沉浸式状态栏 的实现方式 Android 沉浸式状态栏 实现方式一 现在有个更为简单的实现方式 . 相关链接 http://www.apkbus.com/forum.php?mod=viewthread&tid=255929&extra=page%3D3%26filter%3Dsortid%26orderby%3Ddateline%26sortid%3D12 1.效果图 demo 的 github 地址  https://github.com/zyj1609wz/Android