使用鍵盤的空格鍵暫停及繼續播放媒體

四星評等圖示

處理外部鍵盤輸入內容的功能,也是大螢幕最佳化作業的一環,例如決定按下空格鍵來暫停或繼續播放影片/其他媒體後,要對此事件做出什麼回應。這對平板電腦和 Chromebook 特別有用,因為前者往往連接外部鍵盤,而後者通常隨附外接鍵盤,但可在平板電腦模式下使用。

如果媒體是視窗中的唯一元素,例如播放全螢幕影片時,請在 Jetpack Compose 中,於畫面層級回應按鍵事件。

最佳做法

每當應用程式播放媒體檔案時,使用者應該只需按下實體鍵盤上的空格鍵,就能暫停並繼續播放。

要件

  • KEYCODE_SPACE:空格鍵的按鍵碼常數。
  • onPreviewKeyEvent:這個 Modifier 可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。
  • onKeyEvent:與 onPreviewKeyEvent 類似,這個 Modifier 可讓元件 (或其中一個子項) 在成為焦點時,攔截硬體的按鍵事件。

步驟

如要在 Jetpack Compose 中回應按下鍵盤按鍵的事件,應用程式必須監聽按鍵事件、篩選事件,以及回應特定的按鍵事件 (例如按下空格鍵的事件)。

1. 監聽鍵盤事件

透過 Jetpack Compose,您可以在管理按鍵操作的元件內使用 onPreviewKeyEventonKeyEvent 修飾符。

兩個修飾符的主要差異在於,修飾符會在未消耗事件時將事件調派至何處:

  • onPreviewKeyEvent - 將事件調派給其第一個子項。
  • onKeyEvent - 將事件調派給可組合函式的父項。

2. 篩選及處理按下空格鍵的事件

onPreviewKeyEventonKeyEvent 修飾符 lambda 內,篩選按鍵事件,其中按鍵釋放 (KeyEventType.KeyUp) 與空格鍵 (Key.Spacebar) 相符。

如果程式碼會處理事件,且您不想讓事件繼續傳播,請傳回 true。傳回 false,允許其他元件處理事件。

  • 選項 A:使用 onPreviewKeyEvent

    Column(
        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:使用 onKeyEvent

    Column(
        modifier = Modifier.onKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

結果

對於按下空格鍵來暫停並繼續播放影片/其他媒體這類事件,您的應用程式現在可以做出回應。

其他資源

如要進一步瞭解鍵盤事件及其管理方式,請參閱「處理鍵盤輸入」。