并行活动主机

Parallel Activity Host 可以同时激活多个子活动。当您激活一个活动时,Parallel Activity Host 会将该活动置于前台。

../../_images/parallel-activity-host.gif

在 Parallel Activity Host 中,您可以对活动进行分组,以按照您在节点树中定义的顺序显示这些组。当您激活组中的一个活动时,Parallel Activity Host 会将该组中的活动置于前面。例如,这样您可以在常规通知(如电话通知)前面显示关键消息(如引擎故障)。在这两个组中,Parallel Activity Host 按激活顺序显示活动。

使用 Parallel Activity Host

要使用 Parallel Activity Host:

  1. 在 Activity Browser 中,点击 create-root 并创建一个根 Parallel Activity Host。

    Kanzi Studio 在 RootPage 节点中创建一个 Parallel Activity Host 节点。

    ../../_images/activity-browser-create-root-pah.png ../../_images/node-tree-root-pah1.png
  2. 在根 Parallel Activity Host 下方的 Activity Browser 中,点击 add-activity,选择 Create Activity,并创建或分配一个预设给该 Activity。

    例如,创建名为 Seatbelt、Phone Call 和 Engine Failure 的活动。对于每个活动,使用相同的名称作为活动预设。

    Kanzi Studio 创建活动,将它们添加到 Parallel Activity Host,并为每个活动在 Prefabs 中创建一个预设。

    ../../_images/create-activity-and-prefab-seatbelt.png ../../_images/pah-seatbelt-phone-call-engine-failure-browser.png ../../_images/pah-seatbelt-phone-call-engine-failure.png
  3. 创建一个节点,并使用您想要用来激活或停用活动的触发器。

    例如,创建一个 Toggle Button 节点,并使用 Toggle Button: Toggled On 和 Toggle Button: Toggled Off 触发器。

    ../../_images/node-tree-pah-toggle-button.png ../../_images/node-components-toggle-button.png
  4. 在 Node Tree 中,选择您在上一步中创建的节点,在 Node Components > Triggers 按 Alt 并右键单击 中选择您要用于激活活动的触发器,选择 Activate Activity 操作,并在操作中设置:

    • 将 Target Item 到包含您要激活的 Activity 的 Parallel Activity Host。

    • 将 Activation Path 到 Parallel Activity Host 中您想要激活的 Activity 的路径。

      如果您将 Activity 节点嵌套在其他类型的节点中,请在路径中仅包含祖先 Activity 节点。

      小技巧

      要获取到 Activity 的完整激活路径, 在 Activity Browser 中右键单击一个 Activity 并选择 Copy Activation Path。此命令会将从顶级 Activity Host 到该 Activity 的整个路径复制下来。

      Activity Activation Path 仅包含 Activities 和 Activity Hosts。

      ../../_images/activity-browser-copy-activation-path-pah.png
    ../../_images/add-activate-activity-action-pah.png ../../_images/activate-activity-configure-parallel-activity.png
  5. 在 Node Components > Triggers 按 Alt 并右键单击 中,选择您要用于停用活动的触发器,选择 Deactivate Activity 操作,并在操作中设置:

    • 将 Activation Path 到 Parallel Activity Host 中您想要停用的 Activity 的路径。

      如果您将 Activity 节点嵌套在其他类型的节点中,请在路径中仅包含祖先 Activity 节点。

    • 将 Target Item 到包含您要停用的 Activity 的 Parallel Activity Host。

    ../../_images/add-deactivate-activity-action-toggle-button.png ../../_images/deactivate-activity-configure-parallel-activity.png

在 Preview 中,单击切换按钮以激活和停用并行活动主机中的活动。

../../_images/activate-parallel-activities.gif

在 Parallel Activity Host 中控制虚拟化

默认情况下,当您停用一个 Activity 时,Kanzi 会序列化该 Activity 及其子 Activity 的 Activity 属性值。除了您添加的 Activity 属性值外,这还包括有关 Activity 的焦点和激活状态的信息。请记住,Kanzi 不会序列化其他非 Activity 属性的运行时状态。

例如,即使包含该文本框的活动处于非活动状态,并且 Kanzi 卸载其内容,您也可以在 Text Box 中保留用户输入的信息。要实现此目的,在包含 Text Box 的 Activity 中,创建一个字符串活动属性,并在 Text Box 的 Text 属性与您创建的活动属性之间创建双向绑定。

您可以控制 Activities 的虚拟化:

在活动中控制虚拟化

使用 Preserve History 属性,您可以在 Kanzi 停用该活动时控制活动中活动属性的序列化。

要在活动中控制虚拟化,请在 Activity Browser 或 Prefabs 中,选择您要控制活动属性值序列化的活动。在 Properties 中,添加 Preserve History 属性并将其设置为:

  • 启用以序列化 Activity 属性的值。这是默认值。

    当您启用序列化并停用一个 Activity 时,Kanzi 会保留该 Activity 及其子 Activity 的 Activity 属性值。当您激活该 Activity 时,Kanzi 会恢复这些节点中 Activity 属性的序列化值。

  • 禁用以禁用 Activity 属性值的序列化。

    当您禁用序列化并停用一个 Activity 时,Kanzi 不会保留该 Activity 及其子 Activity 的属性值。当您激活该 Activity 时,Kanzi 会重置这些节点中 Activity 属性的值。

../../_images/properties-state-preservation-policy.png

使用 Action 控制虚拟化

使用 Action,您可以在激活或停用 Activity 之前控制 Activity 中属性的序列化。默认情况下,Kanzi 在您激活 Activity 时恢复序列化状态。

要使用 Action 控制虚拟化:

  1. 在 Activity Browser、Prefabs 或 Node Tree 中,选择您要从中控制 Activity 属性值序列化的节点。

  2. 在 Node Components 中,按 Alt 并右键单击 触发器,并创建一个您想用来控制活动序列化的触发器。

    例如,创建一个 On Attached 触发器。

    ../../_images/add-on-attached.png
  3. 要在激活和活动时控制虚拟化,在您创建的触发器中,按 Alt 并右键单击 Actions,选择 Dispatch Message Action > Activity Host > Activate Activity Action,并在 Action 中将 Reset History 参数设置为:

    • 禁用以在用户激活该活动时恢复活动属性的序列化值。这是默认值。

    • 启用后,当用户激活该活动时,将重置活动属性的序列化值。

    ../../_images/node-components-activate-activity-activity-state-restoration-policy.png
  1. 要在停用活动时控制虚拟化,请在您创建的触发器中,创建一个 Dispatch Message Action > Activity Host > Deactivate Activity 操作。

    例如,使用此方法重置用户取消选择并且应用程序停用该 Activity 时由 Activity 显示的应用程序 UI 状态。

    ../../_images/node-components-deactivate-activity-activity-state-restoration-policy.png

在 Parallel Activity Host 中控制 Activity 持久性

默认情况下,当您停用一个活动时,Kanzi 会将该活动从节点树中分离,并删除该活动实例。

使用 Keep Activity Alive 属性,您可以在 Kanzi 停用该活动时控制活动持久性。

要控制活动持久性,请在 Activity Browser 或 Prefabs 中,选择您要控制其持久性的活动。在 Properties 中,添加 Keep Activity Alive 属性并将其设置为:

  • Detach and Destroy。Kanzi 将该活动从节点树中分离,并删除该活动实例。这是默认值。

  • Hide and Disable。Kanzi 隐藏并禁用该活动,而不是销毁它。当您再次激活该活动时,Kanzi 会恢复隐藏的活动并显示同一活动。该节点保持停用前的相同状态,即使您为该活动禁用了虚拟化也是如此。

    这样,再次激活该活动时可以跳过活动实例化。

../../_images/properties-keep-alive.png

激活活动

当您激活一个活动时,Kanzi:

  1. 使用其预设创建一个 Activity 节点。

  2. 将 Activity 节点附加到节点树。

  3. 使活动可见。

  4. 如果活动主机具有按键焦点且未进行其他配置,则将按键焦点设置为活动。控制是否将焦点设置到激活的 Activity。。

  5. 将 Activity 的 Activity Status 属性设置为 Active,并发送 ActivityConcept::ActivityActivatedMessage 和 ActivityConcept::StatusChangedMessage 消息。如果 Activity 的预设件具有激活迁移动画,Activity 会先经过 Activating 状态。请参阅 Activity 的状态管理。

默认情况下,当您停用一个 Activity 时,Kanzi 会序列化该 Activity 及其子 Activity 的 Activity 属性值。除了您添加的 Activity 属性值外,这还包括有关 Activity 的焦点和激活状态的信息。请记住,Kanzi 不会序列化其他非 Activity 属性的运行时状态。

请参阅 在 Parallel Activity Host 中控制虚拟化。

您可以使用以下方式激活 Activity:

找出 Activity 是否处于活动状态。

要确定一个 Activity 是否处于活动状态,请检查该 Activity 节点的 Activity Status 属性的值。

设置初始活动的 Activity

要设置 Parallel Activity Host 中初始处于活动状态的 Activity:

  • 在 Activity Browser 中,选择您希望在 Parallel Activity Host 变为活动状态时处于活动状态的 Activity。

  • 在侧边面板中,启用 InitiallyActive 属性。

当您为某个 Activity 启用 InitiallyActive 属性时,Parallel Activity Host 会在其自身变为活动状态时激活该 Activity,而无需显式激活它。

在 Parallel Activity Host 中,您可以为多个 Activity 启用 InitiallyActive 属性。

../../_images/set-is-initially-active-parallel.png

使用 Activate Activity 消息激活一个活动。

当使用 Activate Activity 消息时:

  • 激活活动的条件过于复杂,无法用属性的值来表示。

  • 您无法提前知道 Activity Host 中的 Activities 的数量。

要使用 Activate Activity 消息激活一个活动:

  1. 创建一个 Activity Host,其中包含多个 Activities。

    ../../_images/pah-seatbelt-phone-call-engine-failure.png ../../_images/pah-seatbelt-phone-call-engine-failure-browser.png
  2. 创建一个节点,并设置一个触发器,您要使用该触发器来激活一个 Activity。

    例如,创建一个 Toggle Button 节点,并使用 Toggle Button: Toggled On 和 Toggle Button: Toggled Off 触发器在并行活动主机中激活和停用一个活动。

    ../../_images/node-tree-pah-toggle-button.png ../../_images/node-components-pah-toggle-button.png
  3. 在 Node Tree 中,选择您在上一步中创建的具有触发器的节点,在 Node Components > Triggers 按 Alt 并右键单击 中选择您要用于激活活动的触发器,选择 Dispatch Message Action > Activity Host > Activate Activity 消息,并在操作集中:

    • 将 Target Item 到包含您要激活的 Activity 的 Activity Host。

    • Activation Path 到您要激活的 Activity 的 Activity Host 的路径。

      如果您将 Activity 节点嵌套在其他类型的节点中,请在路径中仅包含祖先 Activity 节点。

      小技巧

      要获取到 Activity 的完整激活路径, 在 Activity Browser 中右键单击一个 Activity 并选择 Copy Activation Path。此命令会将从顶级 Activity Host 到该 Activity 的整个路径复制下来。

      Activity Activation Path 仅包含 Activities 和 Activity Hosts。

      ../../_images/activity-browser-copy-activation-path-pah.png
    ../../_images/add-activate-activity-action-pah.png ../../_images/activate-activity-configure-pah.png
  4. 要停用并行活动主机中的活动,请重复上一步,但将 Dispatch Message Action > Activity Host > Deactivate Activity 消息添加到您要用于停用该活动的触发器中。

    ../../_images/deactivate-activity-configure-pah.png

在 Preview 中,单击切换按钮以激活和停用并行活动主机中的活动。

../../_images/activate-parallel-activities.gif

使用 Apply Activation Action 激活活动

Apply Activation Action 在包含此操作的 Data Trigger 中,只要条件满足,就会保持活动处于激活状态。当触发条件不再满足时,Kanzi 会将活动的状态回滚到应用操作之前的状态。仅将 Apply Activation Action 与 Data Trigger 一起使用。

当您想将活动的激活与应用程序逻辑同步时,使用 Apply Activation Action。

例如,使用 Apply Activation Action 来显示当属性具有特定值时的集群指示器,然后当该属性的值不再是该值时隐藏相同的指示器。

使用 Data Trigger 时,请记住,Data Trigger 的操作优先于任何其他触发器的操作。

您可以通过完成 教程:控制应用程序 UI 来学习如何使用 Data Trigger 和 Apply Activation Action 控制活动的激活状态。

要使用 Apply Activation Action 激活一个 Activity:

  1. 在 Activity Browser 中,创建一个带有 Activity 的 Parallel Activity Host。

    例如,创建一个名为 LowBattery 的 Activity 的 Parallel Activity Host 节点。

    ../../_images/apply-activation-pah-structure.png
  2. 在 Prefabs 中,添加 Activity 显示的内容。

    例如,添加一个低电量警告的图像。

    ../../_images/apply-activation-pah-activity-content.png
  3. (可选) In the Properties, set the size of the Parallel Activity Host and position of the Activity in the Activity Host.

    ../../_images/apply-activation-pah-set-activity-host-size.png ../../_images/apply-activation-pah-position-activity.png
  4. 创建一个节点,用于控制您在第一步中创建的 Activity 的激活状态。

    例如,从 Asset Packages 将 Slider 拖动到 Node Tree 中的 Parallel Activity Host 节点。在 Properties 中,将 Slider 放置在 Activity Host 中。

    ../../_images/apply-activation-pah-drag-slider.gif ../../_images/apply-activation-pah-position-slider.png
  5. 使用 Apply Activation Action 创建一个 Data Trigger:

    1. 在 Node Tree 中选择 Parallel Activity Host 节点,在 Node Components 按 Alt 并右键单击 Triggers 中,选择 Data Trigger。

      ../../_images/apply-activation-node-tree-pah.png ../../_images/apply-activation-create-data-trigger.png
    2. 在 Expression 中的 Data Trigger 中,单击 表达式打开,在 Node Tree 中选择 Slider,并从 Properties 中将 Value 属性拖到 Expression 字段并编辑表达式以

      {@Slider/RangeConcept.Value}<=20
      

      此条件表达式必须评估为 True 或 False。作为来源,您可以使用属性或数据源中的数据对象。

      单击 Save。

      通过这种方式,当 Slider 中的 Value 属性的值等于或小于 20 时,您可以设置 Data Trigger 来执行 Apply Activation Action。

      ../../_images/apply-activation-expression-pah.png
    3. 在 Data Trigger 按 Alt 并右键单击 Actions 中,选择 Apply Activation Action。

      ../../_images/apply-activation-create-action-slider.png
    4. 在 Apply Activation Action 集中:

      • Activity Host Path 到 .

      • Activity Activation Path 到 LowBattery

      您在 Activity Activation Path 属性中设置的活动路径是相对于您在 Activity Host Path 属性中设置的活动主机节点的。

      Activity Browser 表示 Activity Host 具有带有 data-trigger 图标的 Data Trigger。

      ../../_images/apply-activation-set-lowbattery.png

    小技巧

    要获取到 Activity 的完整激活路径, 在 Activity Browser 中右键单击一个 Activity 并选择 Copy Activation Path。此命令会将从顶级 Activity Host 到该 Activity 的整个路径复制下来。

    Activity Activation Path 仅包含 Activities 和 Activity Hosts。

    ../../_images/activity-browser-copy-activation-path-pah.png

在 Preview 中拖动滑块旋钮:

  • 当滑块的 Value 属性的值等于或小于 20 时,Data Trigger 激活您在 Apply Activation Action 中设置的活动。

    当条件在包含此操作的 Data Trigger 中满足时,Apply Activation Action 会保持活动激活。

  • 当滑块的 Value 属性的值等于或高于 21 时,Data Trigger 将停用您在 Apply Activation Action 中设置的活动。

    当触发条件不再满足时,Kanzi 将活动的状态回滚到应用操作之前的状态。

../../_images/apply-activation-pah-activation-demo.gif

小技巧

在应用程序开发期间,使用这些 Data Trigger 工具在 Activity Browser 侧面板中:

工具

描述 (Description)

../../_images/show-data-trigger-icon.png

显示 Data Trigger 的位置以及该 Data Trigger 的源活动和目标活动的位置。

../../_images/apply-data-trigger-icon.png

模拟应用 Data Trigger 时的状态。

这使您能够在满足 Data Trigger 条件时查看应用程序的状态,而无需更改应用程序中的属性值。

../../_images/data-trigger-node-components-icon.png

在 Node Components 窗口中显示所选的 Data Trigger。

../../_images/ab-helpers.png

在 API 中使用 Activities

有关详细信息,请参阅 Activity2D、Activity3D、ParallelActivityHost2D 和 ParallelActivityHost3D 类。

另请参阅

教程:构建应用程序 UI

教程:控制应用程序 UI