Auf dieser Seite

Implementierung eines Begrüßungsbildschirms mit Qt auf Android

Hier wird gezeigt, wie man mit Qt einen Begrüßungsbildschirm für Android einrichtet.

Android-Startbildschirm mit dem Qt Development-Logo auf grünem Hintergrund

Dies ist ein einfaches Beispiel, das eine Möglichkeit zur Darstellung eines Begrüßungsbildschirms mit Qt veranschaulicht. Beim Start der App wird der Qt-Begrüßungsbildschirm mit einem Logo und einer Hintergrundfarbe zwei Sekunden lang angezeigt. Anschließend wird der Qt-Begrüßungsbildschirm ausgeblendet, um die Hauptansicht der App anzuzeigen. Die Hauptansicht besteht aus einem einfachen Label und einer Schaltfläche zum Schließen.

In diesem Beispiel wird der standardmäßige Android-Splash-Screen (ab Android 12) ausgeblendet.

Dieses Beispiel ist Teil einer Reihe von zwei ähnlichen Beispielen zur Darstellung von Startbildschirmen. Dieses Beispiel verwendet „AndroidManifest“-Flags, das andere eine QML-Ansicht.

Verwendung des Qt-Startbildschirms unter Android

Der Qt-Startbildschirm für Android wird in der Datei „AndroidManifest.xml“ definiert. Die Android-Projektdateien können manuell oder mithilfe des Vorlagengenerators unter „ Qt Creator “ erstellt werden. So erstellen Sie eine Android-Projektdatei mithilfe des Vorlagengenerators unter „ Qt Creator “:

  1. Öffnen Sie Projects
  2. Gehen Sie zum Unterabschnitt „ Build Steps “
  3. Öffnen Build Android APK
  4. Wählen Sie „ Create Templates “ im Unterabschnitt „ Application “ aus
            <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"/>

Im vorherigen Ausschnitt:

Seit Android 12 verfügt Android über einen Standard-Splash-Screen. Beim Start wird der Standard-Splash-Screen angezeigt, bevor die erste Ansicht der Anwendung erscheint. Es gibt Anleitungen und eine API, um ihn anzupassen. Siehe Android-Splash-Screens.
Standardmäßig verwendet Android das Anwendungssymbol für den Splash-Screen. Bei Qt-Anwendungen kann dieses Symbol unverändert verwendet, als Startbildschirm der Anwendung angepasst oder mit dem Qt-Startbildschirm kombiniert werden. Um die Benutzererfahrung beim Start plattformübergreifend einheitlich zu gestalten, kann es erforderlich sein, den Android-Startbildschirm auszublenden. Definieren Sie dazu ein transluzentes Design, das den Android-Startbildschirm 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>

Es gibt jedoch ein Problem: Bei Verwendung eines durchscheinenden Themes funktionieren Orientierungsänderungen nicht mehr. Dies liegt daran, dass die Android-Ansicht ihre Ausrichtung von der darunterliegenden Ansicht erhält – in der Regel ist dies ein Anwendungsmenü, dessen Ausrichtung sich nicht ändert. Und da das Design nicht mehr geändert werden kann, nachdem die Activity-Ansicht festgelegt wurde, bleibt die Anwendung schließlich in einer Ausrichtung hängen.
Als Workaround können wir eine temporäre Activity mit einem durchsichtigen Design für den Android-Startbildschirm erstellen. Sobald wie möglich starten wir eine weitere Activity, die über alle Funktionen verfügt, die unsere Anwendung benötigt.

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

Um den Qt-Startbildschirm zu starten, müssen wir außerdem die Android-Activity „ onCreate “ überschreiben und die QtActivity mithilfe eines Intents starten.

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;
            }
        });
    }
}

In diesem Beispiel enthält die Hauptansicht nur eine einzige Ansicht mit einer Schaltfläche zum Beenden.

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)
        }
    }
}

Beispielprojekt @ 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.