事件會觸發狀態變更並啟動動作。事件會做為信號,從系統 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 for
com.android.myapp` 的值更具體。
不過,如果分派事件時 id="app_open"
、panelId="panel1"
和 component="com.android.yourapp.Activity"
。
雖然 id
和 panelId
相符,但轉換中的 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 ) |
在開啟工作或應用程式時傳送。這個一般事件可根據應用程式的啟動情況觸發動作或轉場效果。 這個事件包含 |
_System_TaskCloseEvent ( SYSTEM_TASK_CLOSE_EVENT_ID ) |
表示工作或應用程式已關閉,與 _System_TaskOpenEvent 相對應。這樣一來,系統就能對應用程式遭到關閉做出反應。這會觸發轉場效果,將面板還原為預設狀態,或啟動其他清除動作。 |
_System_TaskPanelEmptyEvent ( SYSTEM_TASK_PANEL_EMPTY_EVENT_ID ) |
特定面板變為空白時會觸發此事件,並包含 這項事件對於穩健的錯誤復原作業非常重要,而且可在相關聯的內容當機或意外終止時重新啟動應用程式,避免顯示空白的 UI 面板。 舉例來說,如果 |
_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 中動畫完成時觸發。您可以使用這個事件觸發後續動作或狀態變化,這些動作或狀態變化取決於視覺轉換是否完成。 這個事件包含 |