Revision control

Copy as Markdown

// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\example demos/android/splashscreen/manifest
\title Implementing a splash screen with Qt on Android
\ingroup android-platform-extra-topics
\brief Showcase how to setup a splash screen with Qt for Android.
\meta {tag}{android}
\image splash-screen-launch.webp
{Android splash screen with Qt Development logo on green background}
This is a simple example which demonstrates one way to show a splash screen
with Qt. When the app starts, The Qt splash screen with a logo and a
background color is shown for two seconds. The Qt splash screen is then faded
out to show the app main view. The main view consists of a simple label and a
close button.
In this example, the Android default splash screen (Since Android 12) is
hidden.
This example is one of series of two similar examples demonstrating splash
screen. This one uses AndroidManifest flags
\l{Implementing a splash screen with Qt Quick on Android}{the other}
uses QML view.
\section1 Using the Qt splash screen on Android
The Qt splash screen for Android is defined in the AndroidManifest.xml.
The Android project files can be created manually or using the Qt Creator
template generator. To create an Android project file using the Qt Creator
template generator:
\list 1
\li Open \uicontrol {Projects}
\li Go to \uicontrol {Build Steps} subsection
\li Open \uicontrol {Build Android APK}
\li Select \uicontrol {Create Templates} from \uicontrol {Application}
subsection
\endlist
\snippet demos/android/splashscreen/manifest/android/AndroidManifest.xml Splash screen flags
In the previous snippet:
\list
\li \l {android-manifest-qt-specific-metadata}{android.app.splash_screen_drawable}
defines the resource file defining the Qt splash screen.
\li \l {android-manifest-qt-specific-metadata}{android.app.splash_screen_sticky}
keeps the Qt splash screen on the screen until QNativeInterface::QAndroidApplication::hideSplashScreen()
function is called.
\snippet demos/android/splashscreen/manifest/main.cpp Hide splash screen call
\endlist
Since Android 12, Android has a default splash screen. On launch, the default
splash screen is shown before the first view of the application is shown.
There are instructions and an API to modify it. See
\l{Android Splash screens}.
\br By default, Android uses applications icon for the splash screen. On Qt
applications this can be used as is, or modified to be used as the
applications splash screen or it can be combined with Qt splash screen. To
keep the launch user experience consistent between platforms, it may be needed
to hide the Android splash screen. To do this, define a translucent theme that
effectively hides the Android splash screen.
\quotefile demos/android/splashscreen/manifest/android/res/values/splashstarttheme.xml
There is a problem though. Orientation changes stop working if we have
translucent theme. This is caused by the fact that the Android view gets
its orientation from the underlying view, usually this is an Application
Drawer which does not change its orientation. And because the theme cannot be
changed after the Activity view is set, we end up with an application stuck
in one orientation.
\br As a workaround we can create throwaway Activity with translucent theme
for the Android splash screen. As soon as possible we launch another Activity,
which has all the bells and whistles our application requires.
\snippet demos/android/splashscreen/manifest/android/AndroidManifest.xml Startup activity
To launch the Qt splash screen, we also need to override the Android Activity
\c onCreate and use an Intent to launch the QtActivity.
\quotefromfile demos/android/splashscreen/manifest/android/java/io/qt/qtsplashscreeninandroid/SplashActivity.java
\skipto package
\printuntil
In this example the main view contains just a single view with an exit button.
\quotefromfile demos/android/splashscreen/manifest/Main.qml
\skipto import
\printuntil
*/