C

活动视图布局

通过实现一些活动视图的简单布局来演示 ActivityView API。

"ActivityView Layouts Example Screenshot"

构建和部署示例

参见有关构建和部署 Qt for Android Automotive 示例的具体步骤

概述

此示例通过实现一些活动视图的简单布局来演示 ActivityView 布局 API。

它由两个包裹在两个 Column 布局中的 ActivityView 项目和一个在每个列下面的 ActivitiesSelector 面板组成。此选择面板可以用来选择要显示的活动。

包括 API

要在 Qt Quick 应用程序中使用 ActivityView 插件,我们首先必须在 QML 中导入 Qt for Android Automotive ActivityView 模块

import QtAndroidAutomotive.ActivityView

选择活动

ActivitiesSelection 项目构建了可用的活动的列表,并将每个按钮的 onClicked 处理程序与 activitySelected 信号绑定。选择 activitySelected() 信号会触发在 ActivityView 中设置选择的活动的操作。这由下面的 onActivitySelected() 处理

            onActivitySelected: (packageName, className) => {
                 if (activity.status === ActivityView.RemovedExternally
                    && activity.packageName === packageName
                    && activity.className === className) {
                    activity.restore();
                    return;
                }
                activity.packageName = packageName;
                activity.className = className;
            }

上述代码片段显示,如果先前激活的活动将被恢复:所选择的 ActivityViewstatus 属性等于 ActivityView.RemovedExternally,且所选择的活动与先前显示的活动相同。

映射 ActivityView 状态

activityViewStatusToText() 函数将 ActivityView 组件状态映射到以下文本

    function activityViewStatusToText(status) {
        if (status === ActivityView.NotInitialized)
            return "not initialized";
        else if (status === ActivityView.Ready)
            return "ready";
        else if (status === ActivityView.Starting)
            return "starting";
        else if (status === ActivityView.Started)
            return "started";
        else if (status === ActivityView.RemovedExternally)
            return "removed externally";
        return "undefined";
    }

组合应用程序视图

最后,使用 ConditionalLayout 组件来处理屏幕方向更改并选择适当的布局(RowColumn)。

    component ConditionalLayout: Loader {
        id: loader
        property int orientation: Qt.Horizontal
        default property list<Item> layoutContent

        sourceComponent: orientation === Qt.Horizontal ? rowComponent : columnComponent

        Component {
            id: rowComponent

            RowLayout {
                children: loader.layoutContent
            }
        }

        Component {
            id: columnComponent

            ColumnLayout {
                children: loader.layoutContent
            }
        }
    }

它定义了两个包含 ActivityLauncher 组件的 Rectangles 以适应确定的布局。

        ConditionalLayout {
            orientation: Screen.primaryOrientation === Qt.PortraitOrientation
                         ? Qt.Vertical : Qt.Horizontal

            anchors.fill: parent
            anchors.margins: applicationWindow.margins

            Repeater {
                model: 2

                Rectangle {
                    border.width: 1

                    Layout.fillWidth: true
                    Layout.fillHeight: true

                    ActivityLauncher {
                        anchors.fill: parent
                        anchors.margins: applicationWindow.margins / 2
                    }
                }
            }
        }

在特定的 Qt 许可证下提供。
了解更多信息。