設定活動

事件會觸發狀態變更並啟動動作。事件會做為信號,從系統 UI 或程序外部使用意圖分派。事件會通知可擴充的 UI 發生需要回應的情況。

可擴充的 UI 事件是由硬體或軟體變更觸發的系統信號,可變更面板的狀態。這些事件會通知架構發生需要 UI 回應的情況。如要更精確地控制面板狀態,除了內建的系統事件,您也可以定義自訂事件。

事件結構

必要專屬 ID 可識別事件。這個 ID 會將例項類型分類,例如 _System_AppOpenEvent_System_PanelEmptyEvent

除了這個 ID 以外,事件也可以選擇性地攜帶權杖、鍵/值組合,提供事件的背景資訊和詳細資料。這些權杖可更精細地篩選事件,讓轉場效果或動作只在特定條件下觸發。

權杖會以半形分號 (;) 分隔的鍵/值組合清單形式傳遞至事件。以下是系統支援的鍵清單:

說明
panelId 識別與事件相關的特定 UI 面板。
component 指定元件名稱,例如與事件連結的活動。
package 指出與事件相關的套件名稱。
panelToVariantId 在特定情境中指定面板的目標變體。只要監聽面板轉場,即可使用這項屬性串聯動畫。舉例來說,當面板 A 轉換為開啟狀態時,觸發面板 B 轉換為關閉狀態。

例如:

"component=com.android.app;panelId=panel1"

事件比對邏輯

事件傳送後,必須符合定義的條件,才能觸發轉場效果或動作。比對程序分為兩個階段:

  • 嚴格事件 id 比對:傳送事件的 id 必須與轉換或動作事件篩選器中指定的 id 完全相符。如果 ID 不相符,系統會將事件視為不相符。

  • 部分事件權杖比對:如果事件 ID 相符,系統會使用部分比對,根據篩選器中定義的權杖評估事件權杖。

    如要發生比對,轉換事件定義中指定的所有事件屬性 (權杖) 必須與傳送事件中的對應屬性完全相符。

    不過,已派送的事件可以包含篩選器中未明確定義的其他權杖。額外權杖不會妨礙比對。系統會在比對評估中忽略這些項目。

    反之,如果篩選器指定的權杖不在已傳送的事件中,或相符權杖的值不一致,則不視為相符。

舉例來說,假設您定義的轉場效果會在 id="app_open" 發生時觸發 panelId="panel1"component="com.android.myapp.Activity"

如果已派送的事件具有 id="app_open"panelId="panel1"component="com.android.myapp.Activity",系統就會進行比對。符合所有篩選條件,且 Activity value in the dispatched event is considered a match forcom.android.myapp` 的值更具體。

不過,如果分派事件時 id="app_open"panelId="panel1"component="com.android.yourapp.Activity"。 雖然 idpanelId 相符,但轉換中的 component (即 com.android.myapp) 與已傳送事件中的 com.android.yourapp 不符。component

轉換觸發條件

雖然轉移可能符合條件,但這不代表會觸發。每個事件只能觸發一個轉場效果。可擴充的使用者介面只會觸發最接近的相符項目。

舉例來說,如果兩個轉換 (一個有元件名稱,一個沒有元件名稱 -m) 相符,系統只會觸發有元件名稱的轉換。

事件分派和處理

事件是可擴充 UI 動態行為的核心。事件可透過意圖從系統 UI 或外部程序分派。

系統事件

架構定義了數個系統事件,可簡化這些動作:

屬性 說明
_System_OnHomeEvent

(SYSTEM_HOME_EVENT_ID)
表示系統已收到顯示「住家」畫面的要求。在 AAOS 中,「首頁」可以是視窗的彈性設定,例如小工具組合,甚至是地圖。如果轉換或動作需要使用者查看主要主畫面介面,這個事件就非常重要。
_System_TaskOpenEvent

(SYSTEM_TASK_OPEN_EVENT_ID)

在開啟工作或應用程式時傳送。這個一般事件可根據應用程式的啟動情況觸發動作或轉場效果。

這個事件包含 panelIdcomponent 等權杖。

_System_TaskCloseEvent

(SYSTEM_TASK_CLOSE_EVENT_ID)
表示工作或應用程式已關閉,與 _System_TaskOpenEvent 相對應。這樣一來,系統就能對應用程式遭到關閉做出反應。這會觸發轉場效果,將面板還原為預設狀態,或啟動其他清除動作。
_System_TaskPanelEmptyEvent

(SYSTEM_TASK_PANEL_EMPTY_EVENT_ID)

特定面板變為空白時會觸發此事件,並包含 panelId 做為權杖,以便根據空白的面板篩選觸發條件。

這項事件對於穩健的錯誤復原作業非常重要,而且可在相關聯的內容當機或意外終止時重新啟動應用程式,避免顯示空白的 UI 面板。

舉例來說,如果 ControlBar 應用程式當機,您可以設定動作,在面板上偵測到這個事件時,自動重新啟動 ControlBar

_System_EnterSuwEvent

(SYSTEM_ENTER_SUW_EVENT_ID)
表示系統進入設定精靈 (SUW)。這個事件表示系統已準備就緒,並可設定在系統初始化後啟動應用程式,或顯示指定面板。進入這類重要系統狀態時,需要專屬事件來觸發適當的 UI 調整或動作。
_System_ExitSuwEvent

(SYSTEM_EXIT_SUW_EVENT_ID)
表示系統正在退出設定精靈 (SUW)。與 _System_EnterSuwEvent 類似,這個事件可讓系統在設定程序完成時,啟動預設應用程式或轉換為標準 UI。
_System_OnAnimationEndEvent

(SYSTEM_ON_ANIMATION_END_EVENT_ID)
在 UI 中動畫完成時觸發。您可以使用這個事件觸發後續動作或狀態變化,這些動作或狀態變化取決於視覺轉換是否完成。

這個事件包含 variantId 的權杖,指出動畫結束時面板最終顯示的變體。