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

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

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

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

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

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

Комментарии

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

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

  • Результат:90баллов,
  • Очки рейтинга8
МВ

Qt - Тест 001. Сигналы и слоты

  • Результат:68баллов,
  • Очки рейтинга-1
ЛС

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

  • Результат:53баллов,
  • Очки рейтинга-4
Последние комментарии
A
ALO1ZE19 октября 2024 г. 8:19
Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5 октября 2024 г. 7:51
Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55 июля 2024 г. 11:02
QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8 февраля 2024 г. 18:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 1:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Сейчас обсуждают на форуме
J
JacobFib17 октября 2024 г. 3:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
ИМ
Игорь Максимов3 октября 2024 г. 4:05
Реализация навигации по разделам Спасибо Евгений!
JW
Jhon Wick1 октября 2024 г. 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27 сентября 2024 г. 9:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22 июля 2024 г. 4:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

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