- 1. main.qml
- 2. AndroidManifest.xml
- 3. splash.xml
- 4. apptheme.xml
- 5. Ergebnis
Lassen Sie mich Ihnen ein kleines Beispiel für das Hinzufügen eines Begrüßungsbildschirms zu einer in Qt geschriebenen Anwendung zeigen. In diesem Fall wird der Splash Screen über das Android-Ökosystem, d. h. über sein Manifest, zur Anwendung hinzugefügt. Das Hinzufügen eines Manifests wird hier beschrieben.
Eine Möglichkeit zum Erstellen eines Begrüßungsbildschirms in Qt/QML besteht darin, QML/C++-Code zu schreiben, aber der Nachteil dieser Methode ist, dass Sie einen schwarzen Anwendungsbildschirm sehen, bis die Anwendung vollständig geladen ist. Daher müssen Sie die Anwendung mit Java über ihr Manifest laden.
Lassen Sie uns einen solchen Begrüßungsbildschirm erstellen
Die Projektstruktur wird wie folgt aussehen
main.qml
Ich beginne mit dem Langweiligsten - das ist der Inhalt der QML-Datei der Anwendung, die wir erwarten, wenn die Anwendung startet. Nichts Besonderes, das übliche "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
Und jetzt reparieren wir das Manifest, in dem Sie die Ressourcendatei des Anwendungsdesigns angeben müssen, die apptheme.xml heißen wird.
<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">
Fügen Sie dann Splash-Dateiinformationen hinzu
<!-- Splash screen --> <meta-data android:name="android.app.splash_screen_drawable" android:resource="@drawable/splash"/> <!-- Splash screen -->
Diese Dateien müssen den Verzeichnissen res/values und res/drawable hinzugefügt werden.
splash.xml
Der Startbildschirm hat ein Anwendungssymbol, es befindet sich auch im Drawable-Verzeichnis.
<?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
Hier deaktivieren wir die Titelleiste und legen auch den Hintergrund des Anwendungsfensters fest.
<?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>
Ergebnis
Am Ende reicht dies aus, um die Anwendung mit Splash Screen zu erhalten.
Интересен формат иконки, если это png, то как решается проблема scalability? не растягивается ли лого на китайфонах с 1280х2500? У меня просто сплеш скрин с градиентом и логотипом, и вот несколько дней уже пытаюсь реишить проблему растягивания лого, и 9patch делал, и пытался покрыть разрешения, но ещё не пробовал в xml поверх нацепить лого на центр, скажите пожалуйста, решается ли таким образом проблема с совместимостью со всеми экранами?
На данный момент не скажу. Очень давно уже не брался за Java на Android
Ну я решил проблему созданием лого для m-xxxhdpi, разложил по папкам и андроид сам вытаскивает нужный, но, в руководстве один важный аспект пропущен, хотя возможно это у меня только, вообщем qt может свою meta-data всунуть в приложение, и будет либо белый экран после сплеша либо вообще каша, нужно найти в манифесте эту метадату с qtшными splashacreen и splashacreen_port и удалить эти две строки, это я так, вдруг кому пригодится, вроде бы если изначально не пытаться через qtшный гуи манифеста ставить скрины то он ничего не допишет, но вдруг.