Implementierung eines Splash-Screens mit Qt auf Android
Zeigt, wie man einen Splash-Screen mit Qt für Android einrichtet.
Dies ist ein einfaches Beispiel, das eine Möglichkeit demonstriert, einen Startbildschirm mit Qt anzuzeigen. Wenn die App startet, wird der Qt-Splash-Screen mit einem Logo und einer Hintergrundfarbe für zwei Sekunden angezeigt. Der Qt-Splashscreen wird dann ausgeblendet, um die Hauptansicht der Anwendung anzuzeigen. Die Hauptansicht besteht aus einem einfachen Label und einer Schaltfläche zum Schließen.
In diesem Beispiel ist der Standard-Splash-Screen von Android (seit Android 12) ausgeblendet.
Dieses Beispiel ist eines aus einer Reihe von zwei ähnlichen Beispielen, die den Startbildschirm demonstrieren. Dieses Beispiel verwendet die AndroidManifest-Flags , das andere die QML-Ansicht.
Verwendung des Qt-Startbildschirms unter Android
Der Qt-Splash-Screen für Android wird in der Datei AndroidManifest.xml definiert. Die Android-Projektdateien können manuell oder mit dem Qt Creator template generator erstellt werden. So erstellen Sie eine Android-Projektdatei mit dem Qt Creator template generator:
- Öffnen Sie Projects
- Gehen Sie zum Unterabschnitt Build Steps
- Öffnen Sie Build Android APK
- Wählen Sie Create Templates aus dem Unterabschnitt 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"/>
Im vorherigen Ausschnitt:
- android.app.splash_screen_drawable definiert die Ressourcendatei, die den Qt-Splash-Screen definiert.
- android.app.splash_screen_sticky hält den Qt-Splash-Screen auf dem Bildschirm, bis die Funktion QNativeInterface::QAndroidApplication::hideSplashScreen() aufgerufen wird.
QNativeInterface::QAndroidApplication::hideSplashScreen(2000);
Seit Android 12 hat Android einen Standard-Splash-Screen. Beim Start wird der Standard-Splash-Screen angezeigt, bevor die erste Ansicht der Anwendung angezeigt wird. Es gibt Anleitungen und eine API, um ihn zu ändern. Siehe Android Startbildschirme.
Standardmäßig verwendet Android ein Anwendungssymbol für den Startbildschirm. Bei Qt-Anwendungen kann dieses Symbol so verwendet werden, wie es ist, oder es kann so modifiziert werden, dass es als Startbildschirm der Anwendung verwendet wird, oder es kann mit dem Qt-Splash-Screen kombiniert werden. Um die Benutzererfahrung beim Start zwischen den Plattformen konsistent zu halten, kann es erforderlich sein, den Android-Splash-Screen auszublenden. Definieren Sie dazu ein transluzentes Theme, das den Android-Splashscreen 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 Abhilfe können wir eine Wegwerf-Aktivität mit einem durchsichtigen Thema für den Android-Startbildschirm erstellen. Sobald es möglich ist, starten wir eine andere Activity, die alle Funktionen hat, 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-Splash-Screen zu starten, müssen wir auch die Android-Activity onCreate
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.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 einem Exit-Button.
// Copyright (C) 2017 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause 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) } } }
© 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.