處理外部鍵盤輸入內容的功能,也是大螢幕最佳化作業的一環,例如決定按下空格鍵來暫停或繼續播放影片/其他媒體後,要對此事件做出什麼回應。這對平板電腦和 Chromebook 特別有用,因為前者往往連接外部鍵盤,而後者通常隨附外接鍵盤,但可在平板電腦模式下使用。
如果媒體是視窗中的唯一元素,例如播放全螢幕影片時,請在 Jetpack Compose 中,於畫面層級回應按鍵事件。
最佳做法
每當應用程式播放媒體檔案時,使用者應該只需按下實體鍵盤上的空格鍵,就能暫停並繼續播放。
要件
KEYCODE_SPACE:空格鍵的按鍵碼常數。onPreviewKeyEvent:這個Modifier可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。onKeyEvent:與onPreviewKeyEvent類似,這個Modifier可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。
步驟
如要在 Jetpack Compose 中回應按下鍵盤按鍵的事件,應用程式必須監聽按鍵事件、篩選事件,以及回應特定的按鍵事件 (例如按下空格鍵的事件)。
1. 監聽鍵盤事件
透過 Jetpack Compose,您可以在管理按鍵操作的元件內使用 onPreviewKeyEvent 或 onKeyEvent 修飾符。
兩個修飾符的主要差異在於,修飾符會在未消耗事件時將事件調派至何處:
onPreviewKeyEvent- 將事件調派給其第一個子項。onKeyEvent- 將事件調派給可組合函式的父項。
2. 篩選及處理按下空格鍵的事件
在 onPreviewKeyEvent 或 onKeyEvent 修飾符 lambda 內,篩選按鍵事件,其中按鍵釋放 (KeyEventType.KeyUp) 與空格鍵 (Key.Spacebar) 相符。
如果程式碼會處理事件,且您不想讓事件繼續傳播,請傳回 true。傳回 false,允許其他元件處理事件。
選項 A:使用
onPreviewKeyEventColumn( modifier = Modifier.onPreviewKeyEvent { event -> if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) { // Handle spacebar keypress to pause/resume playback. true } else { false } } ) { // Content }
選項 B:使用
onKeyEventColumn( modifier = Modifier.onKeyEvent { event -> if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) { // Handle spacebar keypress to pause/resume playback. true } else { false } } ) { // Content }
結果
對於按下空格鍵來暫停並繼續播放影片/其他媒體這類事件,您的應用程式現在可以做出回應。
其他資源
如要進一步瞭解鍵盤事件及其管理方式,請參閱「處理鍵盤輸入」。