Mise en œuvre d'un écran d'affichage avec Qt sur Android
Montrer comment mettre en place un écran de démarrage avec Qt pour Android.

Il s'agit d'un exemple simple qui démontre une façon d'afficher un écran de démarrage avec Qt. Lorsque l'application démarre, l'écran d'accueil Qt avec un logo et une couleur de fond s'affiche pendant deux secondes. L'écran d'accueil Qt s'efface ensuite pour afficher la vue principale de l'application. La vue principale se compose d'une simple étiquette et d'un bouton de fermeture.
Dans cet exemple, l'écran d'accueil par défaut d'Android (depuis Android 12) est masqué.
Cet exemple fait partie d'une série de deux exemples similaires démontrant l'écran de démarrage. Celui-ci utilise les drapeaux AndroidManifest , l'autre utilise la vue QML.
Utilisation de l'écran d'accueil Qt sur Android
L'écran de démarrage Qt pour Android est défini dans le fichier AndroidManifest.xml. Les fichiers de projet Android peuvent être créés manuellement ou à l'aide du générateur de modèles Qt Creator. Pour créer un fichier de projet Android à l'aide du générateur de modèles Qt Creator:
- Ouvrir Projects
- Aller à la sous-section Build Steps
- Ouvrir Build Android APK
- Sélectionner Create Templates dans la sous-section Application
<meta-data android:name="android.app.splash_screen_drawable"
android:resource="@drawable/qtsplashscreen"/>
<meta-data android:name="android.app.splash_screen_sticky"
android:value="true"/>Dans l'extrait précédent :
- android.app.splash_screen_drawable définit le fichier de ressources définissant l'écran de démarrage Qt.
- android.app.splash_screen_sticky maintient l'écran de démarrage Qt sur l'écran jusqu'à ce que la fonction QNativeInterface::QAndroidApplication::hideSplashScreen() soit appelée.
QNativeInterface::QAndroidApplication::hideSplashScreen(2000);
Depuis Android 12, Android dispose d'un écran de démarrage par défaut. Au lancement, l'écran de démarrage par défaut s'affiche avant la première vue de l'application. Il existe des instructions et une API pour le modifier. Voir Ecrans d'accueil Android.
Par défaut, Android utilise l'icône de l'application pour l'écran de démarrage. Sur les applications Qt, cette icône peut être utilisée telle quelle, ou modifiée pour être utilisée comme écran de démarrage de l'application, ou encore combinée avec l'écran de démarrage Qt. Pour que l'expérience de l'utilisateur au lancement reste cohérente d'une plateforme à l'autre, il peut être nécessaire de masquer l'écran de démarrage d'Android. Pour ce faire, définissez un thème translucide qui masque effectivement l'écran de démarrage d'Android.
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="splashStartTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>Il y a cependant un problème. Les changements d'orientation ne fonctionnent plus si nous avons un thème translucide. Cela est dû au fait que la vue Android obtient son orientation de la vue sous-jacente, généralement un tiroir d'application qui ne change pas d'orientation. Et comme le thème ne peut pas être modifié une fois que la vue Activity est définie, nous nous retrouvons avec une application bloquée dans une seule orientation.
En guise de solution de contournement, nous pouvons créer une activité jetable avec un thème translucide pour l'écran d'accueil d'Android. Dès que possible, nous lançons une autre activité, qui dispose de toutes les fonctionnalités nécessaires à notre application.
<activity
android:name=".SplashActivity"
android:exported="true"
android:theme="@style/splashStartTheme"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>Pour lancer l'écran d'accueil Qt, nous devons également remplacer l'activité Android onCreate et utiliser un Intent pour lancer la QtActivity.
package io.qt.qtsplashscreeninandroid;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.util.Log;
import android.content.Intent;
import android.view.ViewTreeObserver;
import org.qtproject.qt.android.bindings.QtActivity;
public class SplashActivity extends Activity {
private static final String TAG = "SplashActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set up an OnPreDrawListener to the root view.
final View content = findViewById(android.R.id.content);
content.getViewTreeObserver().addOnPreDrawListener(
new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
Intent intent = new Intent(SplashActivity.this, QtActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
content.getViewTreeObserver().removeOnPreDrawListener(this);
finish();
return true;
}
});
}
}Dans cet exemple, la vue principale ne contient qu'une seule vue avec un bouton de sortie.
import QtQuick import QtQuick.Controls Window { visible: true title: qsTr("Qt Splash Screen Example") color: "#2CDE85" Text { id: textLabel text: "First View" anchors.centerIn: parent } Button { id: closeButton anchors.horizontalCenter: parent.horizontalCenter anchors.top: textLabel.bottom anchors.topMargin: 5 background: Rectangle { color: "#00414A" radius: 2 } text: "Close" contentItem: Text { color: "#FFFFFF" text: closeButton.text horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } onClicked: { Qt.callLater(Qt.quit) } } }
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.