Jason,

In order to avoid multiple images to handle different screen resolutions I 
decided to implement my launch image using Qml only. For that reason I have 
omitted launch images for both iOS and Android.

The only disadvantage is that it looks a bit black on the beginning compared 
with other apps opening, but I have a consistent behaviour across platforms. 
One of the most interesting advantages is that you can have a dynamic splash 
screen. This is how my main qml file looks like:

import QtQuick 2.4
import QtQuick.Window 2.2
import Imaginando 1.0

Window {
    id: window
    visible: true
    color: "black"
    width: 1024
    height: 768
    onWidthChanged: deviceScreenSize()
    onHeightChanged: deviceScreenSize()
    Component.onCompleted: {
        if (!controller.loaded)
        {
            splash.state="start"
            deviceScreenSize()
        }
    }

    property string prefix: ""
    property real scaleFactor: 1
    property alias style: styleLoader.item
    property var storeModel
    property real currentWidth: 0
    property real currentHeight: 0

    signal styleLoaded

    function deviceScreenSize()
    {
        if (currentWidth==width)
            return

        if (currentHeight==height)
            return

        currentWidth=width
        currentHeight=height

        var size = 
Math.round(Math.sqrt(width*width+height*height)/Screen.pixelDensity/25.4)

        var screenSizeMin
        var screenSizeMax
        var scaleFactorMin
        var scaleFactorMax

        if (size>=7)
        {
            screenSizeMin=7
            screenSizeMax=12.2
            scaleFactorMin=0.75
            scaleFactorMax=1.25
            styleLoader.source="qrc:/styles/"+window.prefix+"TabletStyle.qml"
            console.log("Device is tablet")
        }
        else
        {
            screenSizeMin=4
            screenSizeMax=7
            scaleFactorMin=0.75
            scaleFactorMax=1.25
            styleLoader.source="qrc:/styles/"+window.prefix+"PhoneStyle.qml"
            console.log("Device is phone")
        }

        scaleFactor = 
scaleFactorMin+((size-screenSizeMin)/(screenSizeMax-screenSizeMin))*(scaleFactorMax-scaleFactorMin)
    }

    function mmToPx(measure)
    {
        return Math.round(Screen.pixelDensity)*measure*scaleFactor
    }

    Loader {
        id: styleLoader
        onStatusChanged:{
            if (styleLoader.status== Loader.Ready)
                window.styleLoaded()
        }
    }

    FontLoader {
        id: mainFont
        source: "qrc:/fonts/OpenSans-Regular.ttf"
    }

    Timer {
        id: timer
        interval: 250; repeat: false
        onTriggered: splash.state = "start"
    }

    SplashView {
        id: splash
        width: window.width
        height: window.height
        onReady: loader.source = Qt.resolvedUrl("MainView.qml")
    }

    Loader {
        id: loader
        anchors.fill: parent
        asynchronous: true
        visible: status == Loader.Ready
        onLoaded: {
            splash.visible = false
            splash.destroy()
            controller.loaded=true
        }
    }
}


Nuno Santos
Founder / CEO / CTO
www.imaginando.pt
+351 91 621 69 62

> On 05 Aug 2015, at 16:03, Jason H <jh...@gmx.com> wrote:
> 
> This question is 50% Qt and 50% Android. Now that I have a launch screen 
> working in iOS, I'd like the same thing in Android.
> 
> Now, iOS lists the launch screen separately from the rest of the application, 
> so it can be loaded without having to load the whole app. I'm not sure this 
> is the case in Android. Most android tutorials just create a Activity 
> subclass with a timeout.
> 
> I was wondering if:
> 1) There is a true launch screen for android (not just faking it with a 
> timeout - I want it to only be displayed for as long as the app is loading),
> 2) How I can accomplish it in Qt? I *think* some people may have done 
> something with a Loader Element to create a stub, then dynamically load the 
> screens, but I'm not sure of what all that entails, and if there are any 
> caveats. 
> 2a) Also, do I need to provide an Activity, or can I do it all in Qt/QML? 
> 2b) Is there any actual perceived benefit? The iOS makes the app seem more 
> responsive in a way, and the loading time is not significantly increased.
> 
> Many thanks in advance.
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to