Implementierung eines Splash-Screens mit Qt Quick auf Android

Zeigt, wie man einen Startbildschirm mit Qt Quick View auf Android einrichtet.

Dieses einfache Beispiel demonstriert die Verwendung einer QML-Ansicht als Qt-Startbildschirm. Es werden keine zusätzlichen Übergänge verwendet. In diesem Beispiel wird der Standard-Splash-Screen, der in Android 12 eingeführt wurde, ausgeblendet. Wenn die Anwendung startet, wird der Startbildschirm zwei Sekunden lang angezeigt, danach wird die Hauptansicht ohne Übergang angezeigt.

Dieses Beispiel ist eines aus einer Reihe von zwei ähnlichen Beispielen, die den Startbildschirm demonstrieren. Dieses Beispiel verwendet die QML-Ansicht, das andere die AndroidManifest-Flags.

Verwendung des Qt Quick Startbildschirms unter Android

Um eine QML-Ansicht als Splash-Screen zu verwenden, definieren Sie eine Ansicht und fügen einige Elemente hinzu, die speziell für die Splash-Screen-Funktionalität gelten.

Window {
    id: splash
    color: "#2CDE85"
    title: qsTr("Splash Window")
    modality: Qt.ApplicationModal
    flags: Qt.SplashScreen
    visible: true

    property int timeoutInterval: 2000
    signal timeout
  • modality: Qt.ApplicationModal setzt die Ansicht modal.
  • flags: Qt.SplashScreen Blendet die Titelleiste aus.
  • property int timeoutInterval: 2000 legt die Sichtbarkeitsdauer für die Ansicht fest.
Laden der Hauptansicht
    Loader {
        id: mainLoader
        source: "Main.qml"

Der Timer ruft bei Zeitüberschreitung die Exit-Funktion auf, um vom Splash-Screen zur Hauptansicht zu wechseln. Eventuelle Out-Animationen werden hier eingeleitet.

    function exit() {
        mainLoader.item.show();
        splash.visible = false
        splash.timeout()
    }

Der Timer lässt eine angemessene Zeit für das Erscheinen des Splash-Screens zu. Dies kann in Verbindung mit dem Signal Loader::onLoaded() oder möglicherweise mit einem anderen Signal aus der App-Implementierung verwendet werden, wenn die App bereit ist, gezeigt zu werden.

    Timer {
        interval: splash.timeoutInterval;
        running: splash.visible;
        repeat: false
        onTriggered: {
            splash.exit()
        }
    }

Beim Start wird der Standard-Splash-Screen angezeigt, bevor die erste Ansicht der Anwendung angezeigt wird. Siehe Android Splash-Screens für eine Anleitung zum Ändern dieses Bildschirms.
Standardmäßig verwendet Android das Anwendungssymbol für den Startbildschirm. Bei einer Qt für Android-Anwendung kann dieses Symbol so geändert werden, dass es als Startbildschirm der Anwendung verwendet wird, oder es kann mit dem Qt-Splashscreen kombiniert werden.

Ausblenden des nativen Android-Startbildschirms

Um die Benutzererfahrung beim Start zwischen verschiedenen Plattformen konsistent zu halten, kann es erforderlich sein, den Android-Splash-Screen auszublenden. Definieren Sie dazu ein durchsichtiges Design, das den Android-Splash-Screen effektiv ausblendet.

<?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>

Allerdings gibt es ein Problem. Orientierungsänderungen funktionieren nicht mehr, wenn wir ein durchsichtiges Theme verwenden. Das liegt daran, dass die Android-Ansicht ihre Ausrichtung von der darunter liegenden Ansicht erhält, normalerweise ist das ein Application Drawer, der seine Ausrichtung nicht ändert. Und da das Thema nicht geändert werden kann, nachdem die Aktivitätsansicht festgelegt wurde, bleibt die Anwendung in einer Ausrichtung stecken.
Als Workaround können wir eine Wegwerf-Aktivität mit einem durchsichtigen Thema für den Android-Startbildschirm erstellen. Sobald dies möglich ist, starten wir eine andere Activity, die alle Funktionen enthält, die unsere Anwendung benötigt.

        <activity
            android:name=".SplashActivity"
            android:exported="true"
            android:label="QML Splash Screen Example"
            android:theme="@style/splashStartTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Jetzt wird der native Android-Splash-Screen nicht angezeigt, und wir starten die QtActivity, die den in QML definierten Splash-Screen anzeigt. Um den QML-Splash-Screen zu starten, müssen wir die onCreate -Methode der Android-Activity außer Kraft setzen und ein Intent zum Starten der QtActivity verwenden.

// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
package io.qt.qmlsplashscreeninandroid;

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 i = new Intent(SplashActivity.this, QtActivity.class);
                i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(i);

                content.getViewTreeObserver().removeOnPreDrawListener(this);
                finish();
                return true;
            }
        });
    }
}

Schließlich öffnet der QML-Splash-Screen die Hauptansicht, die in diesem Beispiel nur eine einzige Ansicht mit einer Schaltfläche zum Schließen enthält.

Beispielprojekt @ code.qt.io

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