9 votes

Un seul SDK Ubuntu peut-il cibler le tactile et l'ordinateur de bureau avec des présentations distinctes ?

Je sais que les applications tactiles fonctionneront sur le bureau avec la même interface, mais je me demandais s'il était possible pour une application Ubuntu SDK d'avoir une interface multi-fenêtres avec des éléments d'interface de style bureau lorsqu'elle fonctionne en mode bureau, tout en fournissant une interface tactile séparée lorsqu'elle fonctionne sur des plates-formes tactiles.

6voto

Ghirai Points 11

Il existe plusieurs façons de modifier les aspects de la mise en page en fonction de la taille de la fenêtre. Au niveau le plus élémentaire, vous pouvez simplement attribuer des valeurs différentes aux propriétés en fonction des dimensions. Voici un exemple minimal qui dessine un carré gris qui devient orange si vous agrandissez la fenêtre :

Courir avec qmlscene path/to/file.qml

import QtQuick 2.0
import Ubuntu.Components 0.1

MainView {
    id: root
    width: units.gu(50)
    height: units.gu(50)

    Rectangle {
        id: hello
        color: parent.width > units.gu(60) ? UbuntuColors.orange : UbuntuColors.warmGrey
        anchors.fill: parent
    }
}

Bien sûr, si votre application comporte des éléments plus complexes, cela peut devenir un peu fastidieux. Pour vous aider, la boîte à outils Ubuntu fournit une fonction Composant ConditionalLayout où vous pouvez définir différentes mises en page qui seront activées lorsqu'une condition est remplie. Cela se fait de manière dynamique et vous pouvez voir les changements lorsque vous redimensionnez la fenêtre.

Voici un exemple plus complexe utilisant ConditionalLayout :

import QtQuick 2.0
import Ubuntu.Components 0.1
import Ubuntu.Components.ListItems 0.1 as ListItem
import Ubuntu.Layouts 0.1

MainView {
    id: root
    width: units.gu(50)
    height: units.gu(75)

    Page {
        anchors.fill: parent

        Layouts {
            id: layouts
            anchors.fill: parent
            layouts: [

                ConditionalLayout {
                    name: "flow"
                    when: layouts.width > units.gu(60)

                    Flow {
                        anchors.fill: parent
                        flow: Flow.LeftToRight

                        ItemLayout {
                            item: "sidebar"
                            id: sidebar
                            anchors {
                                top: parent.top
                                bottom: parent.bottom
                            }
                            width: parent.width / 3
                        }

                        ItemLayout {
                            item: "colors"
                            anchors {
                                top: parent.top
                                bottom: parent.bottom
                                right: parent.right
                                left: sidebar.right
                            }
                        }
                    }
                }
            ]

            Column {
                id: sidebar
                anchors {
                    left: parent.left
                    top: parent.top
                    right: parent.right
                }
                Layouts.item: "sidebar"

                ListItem.Header {
                    text: "Ubuntu Color Palette"
                }

                ListItem.Standard {
                    id: orangeBtn
                    text: "Ubuntu Orange"
                    control: Button {
                        text: "Click me"
                        onClicked: {
                            hello.color = UbuntuColors.orange
                        }
                    }
                }

                ListItem.Standard {
                    id: auberBtn
                    text: "Canonical Aubergine"
                    control: Button {
                        text: "Click me"
                        onClicked: {
                            hello.color = UbuntuColors.lightAubergine
                        }
                    }
                }

                ListItem.Standard {
                    id: grayBtn
                    text: "Warm Grey"
                    control: Button {
                        text: "Click me"
                        onClicked: {
                            hello.color = UbuntuColors.warmGrey
                        }
                    }
                }
            } // Column

            Rectangle {
                id: hello
                Layouts.item: "colors"
                color: UbuntuColors.warmGrey
                anchors {
                    top: sidebar.bottom
                    bottom: parent.bottom
                    left: parent.left
                    right: parent.right
                }

                Label {
                    anchors.centerIn: parent
                    text: "Hello (ConditionalLayout) World!"
                    color: "black"
                    fontSize: "large"
                }
            }
        } // Layouts
    } // Page
} // Main View

Lorsqu'il est dans la taille par défaut d'un téléphone, il se présente comme suit :

phone layout

Lorsqu'il est étendu à une tablette ou à un ordinateur de bureau, il se présente comme suit :

tablet layout

0voto

Rod Smith Points 486

Je pense que vous pouvez obtenir ce résultat en utilisant Mises en page conditionnelles .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X