Evgenii Legotckoi
10 марта 2020 г. 5:41

Android и QML - Добавление Splash Screen

Позвольте мне показать вам небольшой пример добавления Splash Screen в приложение, написанное на Qt. В этом случае Splash Screen будет добавлен в приложение с помощью экосистемы Android, то есть через его манифест. Добавление манифеста описано здесь.

Одним из вариантов создания экрана-заставки в Qt/QML является написание кода на QML/C++, но недостатком этого способа является то, что вы будете видеть черный экран приложения до тех пор, пока приложение не будет полностью загружено. Следовательно, вы должны загрузить приложение, используя Java, через его манифест.

Давайте сделаем такой splash screen


Структура проекта будет выглядеть следующим образом

main.qml

Начну с самого скучного — это содержимое QML-файла приложения, которое мы будем ожидать при запуске приложения. Ничего примечательного, обычный "Hello World"

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    id: window
    visible: true
    width: 480
    height: 640
    title: qsTr("Hello World")

    Text {
        text: qsTr("Splash Screen")
        anchors.centerIn: parent
    }
}

AndroidManifest.xml

А теперь поправим манифест, в котором нужно указать ресурсный файл темы приложения, который будет называться apptheme.xml

<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" 
          android:theme="@style/AppTheme" 
          android:name="org.qtproject.qt5.android.bindings.QtActivity" 
          android:label="-- %%INSERT_APP_NAME%% --" 
          android:screenOrientation="unspecified" 
          android:launchMode="singleTop">

Затем добавьте информацию о файле заставки

<!-- Splash screen -->
<meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/>
<!-- Splash screen -->

Эти файлы должны быть добавлены в каталоги res/values и res/drawable .

splash.xml

В Splash Screen есть иконка приложения, она тоже находится в каталоге drawable.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="#FFFFFFFF"/>
        </shape>
    </item>
    <item>
         <bitmap android:src="@drawable/icon"
        android:gravity="center" />
    </item>
</layer-list>

apptheme.xml

Здесь мы отключаем строку заголовка, а также устанавливаем фон окна приложения.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash</item>
    </style>
</resources>

Результат

В итоге этого будет достаточно, чтобы получить приложение с Splash Screen.

Вам это нравится? Поделитесь в социальных сетях!

Ds
  • 24 июня 2022 г. 21:49

Интересен формат иконки, если это png, то как решается проблема scalability? не растягивается ли лого на китайфонах с 1280х2500? У меня просто сплеш скрин с градиентом и логотипом, и вот несколько дней уже пытаюсь реишить проблему растягивания лого, и 9patch делал, и пытался покрыть разрешения, но ещё не пробовал в xml поверх нацепить лого на центр, скажите пожалуйста, решается ли таким образом проблема с совместимостью со всеми экранами?

Evgenii Legotckoi
  • 29 июня 2022 г. 13:06

На данный момент не скажу. Очень давно уже не брался за Java на Android

Ds
  • 29 июня 2022 г. 16:05

Ну я решил проблему созданием лого для m-xxxhdpi, разложил по папкам и андроид сам вытаскивает нужный, но, в руководстве один важный аспект пропущен, хотя возможно это у меня только, вообщем qt может свою meta-data всунуть в приложение, и будет либо белый экран после сплеша либо вообще каша, нужно найти в манифесте эту метадату с qtшными splashacreen и splashacreen_port и удалить эти две строки, это я так, вдруг кому пригодится, вроде бы если изначально не пытаться через qtшный гуи манифеста ставить скрины то он ничего не допишет, но вдруг.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
  • Последние комментарии
  • Evgenii Legotckoi
    16 апреля 2025 г. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 апреля 2025 г. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    1 апреля 2025 г. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    9 марта 2025 г. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    9 марта 2025 г. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…