Sur cette page

Implémentation d'un écran de démarrage avec Qt sur Android

Découvrez comment configurer un écran de démarrage avec Qt pour Android.

Écran de démarrage Android avec le logo « Qt Development » sur fond vert

Il s'agit d'un exemple simple illustrant une façon d'afficher un écran de démarrage avec Qt. Au lancement de l'application, l'écran de démarrage Qt, comportant un logo et une couleur d'arrière-plan, s'affiche pendant deux secondes. L'écran de démarrage Qt s'estompe ensuite pour laisser place à 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 de démarrage par défaut d'Android (depuis Android 12) est masqué.

Cet exemple fait partie d’une série de deux exemples similaires illustrant l’utilisation d’un écran de démarrage. Celui-ci utilise les indicateurs AndroidManifest, tandis que l’autre utilise une vue QML.

Utilisation de l'écran de démarrage 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 de l'Qt Creator. Pour créer un fichier de projet Android à l'aide du générateur de modèles de l'Qt Creator:

  1. Ouvrez Projects
  2. Accédez à la sous-section « Build Steps »
  3. Ouvrez Build Android APK
  4. Sélectionnez « 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 de code précédent :

Depuis Android 12, Android dispose d’un écran de démarrage par défaut. Au lancement, cet écran s’affiche avant que la première vue de l’application ne s’affiche. Des instructions et une API permettent de le modifier. Voir Écrans de démarrage Android.
Par défaut, Android utilise l’icône de l’application pour l’écran de démarrage. Dans les applications Qt, celle-ci peut être utilisée telle quelle, modifiée pour servir d’écran de démarrage à l’application, ou combinée avec l’écran de démarrage Qt. Afin de garantir une expérience utilisateur cohérente au lancement sur toutes les plateformes, il peut s’avérer nécessaire de masquer l’écran de démarrage Android. Pour ce faire, définissez un thème translucide qui masque efficacement l’écran de démarrage 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 cessent de fonctionner si l’on utilise un thème translucide. Cela est dû au fait que la vue Android hérite de son orientation de la vue sous-jacente, qui est généralement un tiroir d’applications dont l’orientation ne change pas. Et comme le thème ne peut pas être modifié une fois que la vue de l’activité est définie, l’application se retrouve bloquée dans une seule orientation.
Pour contourner ce problème, nous pouvons créer une activité jetable dotée d’un thème translucide pour l’écran de démarrage Android. Dès que possible, nous lançons une autre activité, qui dispose de toutes les fonctionnalités requises par 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 de démarrage Qt, nous devons également redéfinir la méthode ` onCreate ` de l’activité Android 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)
        }
    }
}

Exemple de projet sur code.qt.io

© 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.