Qt for Android Splash启动页最简单延时关闭
luoyayun361 2018-08-11 10:20:01 1103
收藏 2
分类专栏: Qt for Android 文章标签: 启动页 splash 延时展示 android
前言
随着 Qt 版本的更新,对移动端的开发接口也越来越多,这给 Qt 开发移动端提供了极大的便利,也越来越爱上了这种跨平台的开发。今天要讲的是关于 Qt for Android 启动页显示的问题,首先,软件在启动时初始化过程会有一个等待时间,如果没有splash启动页的话,就不会在初始化的过程中呈现白屏(或黑屏),这样用户体验会很差,所以 splash 的作用就体现出来了。随之又带来一个问题,如果软件初始化的时间很短,那么添加启动页后打开软件就会出现启动页图片一闪而过的现象,所以这种情况下,为了让用户体验更好,就需要手动添加启动页延时关闭的效果。另外,启动页还有其他用途,比如可以展示app 的 logo 或者软件的其他信息,当然还可以显示广告,这是几乎所有 app都有启动页的原因。
正文
网上有很多介绍都是关于 Android 原生开发上关于启动页的配置说明,大体思路都是自己创建一个启动页面,然后定定时器延时显示,几乎很少看到用 Qt 开发Android如何配置,对于一个并不太熟悉 Android原生开发者以及刚接触用 Qt 跨平台开发者来说无疑是一个比较难的问题,在研究过很多 Android 原生配置以及 Qt 的官方文档后终于找到了最简单的解决方案。在此分享给正在Qt 跨平台开发 Android的道路上艰难前行的小伙伴们。
环境
我这里使用Qt 最新版 Qt5.11.0,Android SDK 使用 android-26 。
创建项目
首先创建一个 Qt 工程(我这里用 QML),导入一个模板。创建后结构如下:
然后打开“项目”
Build Android APK 项打开详情
创建模板
创建后结构如下:
设置Splash启动页
打开 AndroidManifest.xml文件,切换到编辑模式
然后找到以下地方
这里原本是注释掉的,将这两句放开。
注意,在 Qt5.9及以下版本是没有下面这句话的
<!-- meta-data android:name="android.app.splash_screen_sticky" android:value="true"/ -->
- 1
如果将这里的 value 设置为 true,那么启动页将会一直显示,不会跳转到主程序界面中。这是要做启动页延时显示最关键的一句。
OK,将这两句注释打开过后,由于这里启动页是引用 drawable 下的图片,所以需要drawable下面放一张准备好的启动页图片。
打开程序目录, 找到刚刚创建的 android 目录,然后在 res 目录下创建一个 drawable 文件夹,并将启动页图片放到文件夹中,如图:
接下来编译到真机中,这时候会发现,程序启动后会一直停留在启动页,如图:
(我这里是随便找了一张启动页图片)
这是因为前面提到的,设置了下面这句
启动页延时展示
上面已经提到,如果设置了android.app.splash_screen_sticky为 true,启动页会一直停留显示,如果设置为 false,那么启动页将会一闪而过(程序很快就加载完成),那么如果要做启动页延时展示,就需要在上面的程序基础上添加一句话。
打开 main文件,在创建 qml 之前加上
QTimer::singleShot(3000,NULL,[=](){
QtAndroid::hideSplashScreen(500);
});
这里为了演示,我延时显示了三秒钟,三秒过后关闭启动页画面。QtAndroid在5.10新增了一个接口,hideSplashScreen,该接口的作用就是为了隐藏启动页,并且可以传参数,来设定启动页渐变隐藏的时间。
这就很轻松的解决了启动页延时展示的效果。
(由于android 模拟器不可用,手机上也不方便做视频录制,所以就不上传演示效果了,有兴趣的可以下载源码看效果)
注:关于启动的瞬间有白屏或黑屏的情况,后期会专门写博客介绍。
源码在这里