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.
Réponses
Trop de publicités?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 :
Lorsqu'il est étendu à une tablette ou à un ordinateur de bureau, il se présente comme suit :
Je pense que vous pouvez obtenir ce résultat en utilisant Mises en page conditionnelles .