Evgenii Legotckoi
Evgenii Legotckoi9 марта 2020 г. 18: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.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

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

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

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

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

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

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

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
СЦ

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
AT

C++ - Тест 001. Первая программа и типы данных

  • Результат:73баллов,
  • Очки рейтинга1
m

C++ - Тест 002. Константы

  • Результат:58баллов,
  • Очки рейтинга-2
Последние комментарии
АН
Алексей Николаев26 марта 2023 г. 9:10
Qt/C++ - Урок 042. PopUp уведомление в стиле Gnome с помощью Qt Добрый день, взял за основу ваш PopUp notification , и немного доработал его под свои нужды. Добавил в отдельном eventloop'e всплывающую очередь уведомлений с анимацией и таймеро…
АН
Алексей Николаев26 марта 2023 г. 9:04
Qt/C++ - Урок 042. PopUp уведомление в стиле Gnome с помощью Qt Включите прозрачность в композит менеджере fly-admin-theme : fly-admin-theme ->Эффекты и всё заработает.
Evgenii Legotckoi
Evgenii Legotckoi24 марта 2023 г. 10:09
Django - Урок 062. Как написать блочный шаблонный тег tabbar наподобие тега blocktranslate Почитайте эту статью про "хлебные крошки"
NSProject
NSProject24 марта 2023 г. 9:15
Django - Урок 062. Как написать блочный шаблонный тег tabbar наподобие тега blocktranslate Хорошая статья. И тут я подумал что на её основе можно отлично сформировать "хлебные крошки". Самое простое распарсить адрес. Так и поступил бы но лень
Сейчас обсуждают на форуме
P
Pisych29 марта 2023 г. 5:35
Как подсчитать количество по условию? большое спасибо. завтра проверю. сейчас уже нет возможности:(
Evgenii Legotckoi
Evgenii Legotckoi29 марта 2023 г. 4:11
Замена поля ManyToMany Картинки точно нужно хранить в медиа директории на сервере, а для обращения использовать ImageField. Который будет хранить только путь к изображению на сервере. Хранить изображения в базе данных…
ВА
Виталий Анисимов29 января 2023 г. 15:17
Как добавить виртуальную клавиатура с Т9 в своей проект на QML. Добрый день. Прошу помочь, пишу небольше приложение в Qt. Добвил в свой проект виртуальную клавиатуру от Qt. Но как добавить в него возможность изменения Т9 никак не могу понять.
P
Pisych16 марта 2023 г. 0:23
Как записать значение даты в Input date? Уппс! нашел ошибку. Тема закрыта
Evgenii Legotckoi
Evgenii Legotckoi15 марта 2023 г. 5:08
Почему не работает редирект? Добрый день! Через Ajax редирект и не будет работать. Вам нужно вернуть JsonResponse и обработать его в на клиентской стороне в скрипте вызов Ajax. То есть вызвать редирект в этой фун…

Следите за нами в социальных сетях