Qt for Android程序沉浸式启动页面(去除标题栏、去除黑屏、保留后台切换动画)
最近研究Qml程序在安卓手机上运行,Qml的运行没啥问题,编译环境配置成功即可运行,安卓原生的一些东西就需要自己去琢磨了,比如程序启动后,默认会有一个短暂的黑屏以及默认标题栏,很影响用户体验,通过查阅相关资料后,记录下踩坑之路,先上最终效果:
首先,解决启动黑屏和无标题栏显示,我们需要创建一个 android 的布局文件 xml,在res/drawable目录下创建一个 xml 文件,并命名为style.xml。
<?xml version="1.0" encoding="utf-8"?>
注意:很多教程上会采用上文中注释掉的
然后,打开 AndroidMenifest.xml文件,在 Activity 组添加主题的设置:
android:theme="@style/custom_Style"
接下来设置自定义启动页面我们需要创建一个 android 的布局文件 xml,在res/drawable目录下创建一个 xml 文件,并命名为m_splash.xml。
然后,打开该文件,并输入:
<?xml version="1.0" encoding="utf-8"?> -
注意:自定义一个背景颜色,该颜色与背景图片背景颜色一致,同时该背景图片尺寸不要太大,否则会出现超出屏幕的情况,经本人测试,使用一个一个较小尺寸的图片,设置背景颜色与图片背景一致以达到适配不同尺寸屏幕手机的启动页面效果(CSDN的APP就是这么干的)。
color.xml:(自带模板里有这个文件,在后面加上背景颜色即可)
<?xml version="1.0" encoding="utf-8"?> #FFBB86FC #FF6200EE #FF3700B3 #FF03DAC5 #FF018786 #FF000000 #FFFFFFFF #f7f8fb
在AndroidMenifest.xml中,设置启动页面,原始状态下该属性为注释状态,一个属性表示启动页路径,第二个属性值表示启动页是否保持住,为false时为一闪而过:
基本功能都添加完毕了,现在的程序APP就像那么回事了,最后设置启动页自动关闭时间,在main.cpp中设置单次计时器:
#ifdef Q_OS_ANDROIDQTimer::singleShot(3000,&app,[=](){QtAndroid::hideSplashScreen(500);});#endif
基本功能就讲解完了,如果要像我这么要求启动页是沉浸式标题栏(白色),进入主界面时候标题栏变成程序主题色(蓝色),在Qml中添加修改状态栏颜色代码,当计时器时间到后,QtAndroid::hideSplashScreen启动后,调用Qml中修改状态栏颜色的函数即可。
QObject* obj = engine.rootObjects()[0]; #ifdef Q_OS_ANDROID QTimer::singleShot(3000,&app,[=](){QtAndroid::hideSplashScreen(500);QMetaObject::invokeMethod(obj,"setStatusBarColor");}); #endif
我设置状态的方法使用 GitHub中一个大神做的一份开源代码,专门处理透明状态栏的,并且使用非常方便,跟着说明添加进工程就可以,链接地址:
https://github.com/jpnurmi/qtstatusbar
最后贴张资源文件图:
Tips:当在做Qt网上查不到资料时,可以试试直接搜Android
更多相关文章
- 扩大攻击层面:React Native Android应用程序
- 为何Android普通APP可以执行私有数据中的so文件,而system app却不
- 关于Android(安卓)Genymotion 运行DDMS报ADB server didn't ACK
- Android(安卓)WebView设置代理及账号密码
- 在 Android(安卓)开发中使用协程 | 上手指南
- [置顶] Android无线开发的几种常用技术(阿里巴巴资深工程师原创
- Android通知栏Notification的实现
- Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
- Android(安卓)系列 4.6在显示其他应用程序的同时运行后台服务