Qt for Android 去掉Qt原生启动界面或短暂黑屏(或白屏)的问题

文章目录

    • 感言
    • 问题
    • 解决方案
    • 遗留问题

感言

时隔1年多,又开始搞Qt Android开发了,再次回头看我之前的记录,发现很多问题都被官方友好的解决了,而我的知识面还停留在5.9那个阶段,所以再次搞新版的Qt安卓既陌生又熟悉。咳咳,先感叹感叹一下,好了,回归正题。

首先,这次我开发的qt版本是最新版本Qt5.12.2,使用的是Android_for_arm64_v8a版本,这个版本是新出的,我在5.9的时候还没见过,网上说法是支持64位,之前的armeabi_v7a是支持32位的,64位是向下支持的,所以也是尝鲜心理,就采用最新的模式(armeabi_v7a模式我也跑过,一样没问题的哦!!!)

问题

今天要说的问题还是我之前说过的一个老问题,就是启动界面的问题,不过这次Qt官方有了很好的解决,我之前的 Qt for android 在安卓上面运行app启动闪黑屏的解决方法只是暂时解决那个问题,缺陷还是非常大的,这次找到的方案可以说是完美解决,可以相当原生开发一样完美了。

好了,知道各位已经等不及了。先列出我已知的2种解决方案(可能还有第3种,第4种。。。靠各种大大自己去发掘更好的方案了):

解决方案

解决方案一:
使用透明主题
点击项目 -> 在 构建设置 里面找到 Build Android APK 栏目,点击 create templates 创建一个 AndroidManifest.xml(刚接触这个新版本的时候我都忘记这个按钮在哪里了,让我废了好大时间才熟悉找到),贴图如下:
Qt for Android 去掉Qt原生启动界面或短暂黑屏(或白屏)的问题_第1张图片
xml文件如下:


<manifest package="org.qtproject.example" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
    <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="-- %%INSERT_APP_NAME%% --">
        <activity
            android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation"
            android:name="org.qtproject.qt5.android.bindings.QtActivity"
            android:label="-- %%INSERT_APP_NAME%% --"
            android:screenOrientation="unspecified"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
                        
            
            
            >

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            intent-filter>

            
            
            

            <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/>
            <meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
            <meta-data android:name="android.app.repository" android:value="default"/>
            <meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
            <meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
            
            <meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
            <meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
            <meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
            
            <meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
            <meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
            <meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
            <meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
            <meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
            
            <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg"/>
            <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg"/>
            <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg"/>
            

            
            
            
            

            
            
            <meta-data android:name="android.app.background_running" android:value="false"/>
            

            
            <meta-data android:name="android.app.auto_screen_scale_factor" android:value="false"/>
            

            
            
            <meta-data android:name="android.app.extract_android_style" android:value="full"/>
            
    activity>

    

    application>

    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="16"/>
    <supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>

    
    

    
    

manifest>

亲测可用还可靠,使用效果很不错,为了达到更好的效果,各位客官可以看我启动页延时关闭博客。
解决方案二:
使用图片替换主题
在res/values文件目录下新建一个 style.xml 文件,文件内容如下:


<resources>
<style name="Theme.AppStartLoad" parent="android:Theme">
    "android:windowBackground">@drawable/logo
        
    "android:windowNoTitle">true
style>
<style name="Theme.AppStartLoadTranslucent" parent="android:Theme">
    "android:windowIsTranslucent">true
    "android:windowNoTitle">true
style>
resources>

然后在 AndroidManifest.xml 中应用上面定义的两个主题,添加的位置如下:


<activity  android:theme="@style/Theme.AppStartLoad">
            
            
            
            
		//这上面的是添加启动图片

如图所示:文件太长,分两次截图,自行组合查看
Qt for Android 去掉Qt原生启动界面或短暂黑屏(或白屏)的问题_第2张图片
Qt for Android 去掉Qt原生启动界面或短暂黑屏(或白屏)的问题_第3张图片
这个方案中,如下图:Qt for Android 去掉Qt原生启动界面或短暂黑屏(或白屏)的问题_第4张图片
这一块可以去掉或者使用方案一,不然的话启动很完美就是标题栏会缩一下,导致很突兀。

遗留问题

这里设置只是为了解决上面的问题,可是启动页面还是会很快或者一闪就进入主页面了,还未达到更好的效果,为了更好的配合启动页面,请参考我下面这篇博客Qt for Android Splash启动页延时关闭

方案参考于:https://www.cnblogs.com/cheungxiongwei/p/8661211.html

你可能感兴趣的:(Qt,for,android)