語義瀏覽權限

背景

當使用者與螢幕的某個部分互動時,系統會執行點擊測試,判斷要將該互動路徑傳送至哪個檢視區塊。目前有兩種hit regions:語意上可見和語意上不可見

HitTestInteraction 列舉會指定語意 (無障礙) 點擊測試是否應與這些項目互動。

語意上可見的命中區域會與一般命中測試和 accessibility hit testing 互動,而語意上不可見的命中區域只會與一般命中測試互動,例如來自滑鼠或觸控事件。

智慧螢幕個案研究

為了進一步瞭解為何需要語意可見性做為屬性,不妨看看動機範例。舉例來說,智慧螢幕產品基本上是 Flutter 應用程式,有時會啟動子項應用程式,例如網頁檢視畫面。

父項 Flutter 應用程式可以啟動子項網頁檢視畫面,其中包含 YouTube 播放器等內容。在某些情況下,部分命中應傳送至 YouTube (例如播放或暫停影片),而其他命中則應由父項程序處理,例如手勢可完全關閉播放器。由於兩個畫面都是全螢幕,因此這並不容易。

其中一個解決方法是讓父項 Flutter 程序將全螢幕、透明且語意上不可見的命中區域,做為最上層的檢視區塊。我們將這個檢視區塊稱為「輸入防護罩」。有了輸入防護罩,Flutter 就能攔截所有輸入內容 (包括 YouTube 播放器專用的內容),然後視需要取用或重新導向輸入內容。

為了進一步瞭解為什麼這個輸入防護罩需要語意上隱形,我們來看看如果不是這樣,會發生什麼情況,方法是使用無障礙功能的探索模式。使用者在螢幕上拖曳手指時,無障礙管理工具會朗讀手指下方的內容。這些無障礙命中測試想要忽略輸入護罩,改為朗讀底下的「實際」內容。

只要讓輸入防護罩在語意上隱形,就能達到這個效果。無障礙功能點擊只會與語意上可見的點擊區域互動,在本例中為 YouTube 播放器。

範例

簡單案例

綠色檢視區塊在語意上不可見,會疊加在藍色檢視區塊上方,而藍色檢視區塊在語意上可見。 語意命中測試不會看到綠色的語意隱形檢視區塊,因此會前往藍色檢視區塊。

這張圖表顯示一般命中測試如何以語意上不可見的檢視區塊為目標,而語意命中測試則會略過該檢視區塊,以底層語意上可見的檢視區塊為目標。

圖片說明:語意上不可見的檢視區塊會疊加在語意上可見的檢視區塊上。因此,與所有檢視區塊互動的常規命中測試會命中頂端語意上不可見的檢視區塊。語意命中測試會忽略這個項目,因此會改為命中底部語意可見的項目。

智慧展示櫃

從上到下依序是透明檢視畫面、紅色檢視畫面和藍色檢視畫面。透明檢視區塊在語意上是隱形的,且為全螢幕,而紅色和藍色檢視區塊代表使用者可能想互動的不同內容,例如由 Flutter 執行的網頁或應用程式。Flutter 內容不會直接收到一般點擊,因為這些點擊會由頂層檢視畫面處理,但 Flutter 內容會收到語意點擊,例如由無障礙服務執行的點擊,因為語意點擊會忽略語意上不可見 (以及視覺上不可見) 的頂層檢視畫面。

智慧螢幕示意圖

圖片說明:畫面上有三個檢視區塊,由上到下分別代表隱形的語意防護罩、YouTube 播放器和 Flutter 檢視區塊。無論語意可見度為何,一般點擊測試都會前往最上層的檢視畫面,因此透明的「輸入防護罩」會接收這些測試。語意點擊測試會忽略這個最上層的輸入防護罩,因此會前往 Z 軸順序最高、語意上可見的檢視區塊:YouTube 播放器。