在 Android TV 上使用 D-Pad 導覽
Android TV 遙控器具有 D-pad 控制項,可傳送指令,並以按鍵事件的形式傳送至 Activity 的 dispatchKeyEvent(KeyEvent)。請將這些項目委派給「PlayerView」:
Kotlin
override fun dispatchKeyEvent(event: KeyEvent?): Boolean { return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
Java
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
要求 PlayerView 的焦點對於瀏覽播放控制項和略過廣告非常重要。請考慮在 onCreate 的 Activity 中要求焦點:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView.requestFocus(); // ... }
如果您在 Android TV 上使用 Compose,則需要將 AndroidView 設為可聚焦,並將修飾符參數傳遞至 AndroidView,據此委派事件:
AndroidView( modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) }, factory = { playerView }, )
使用 Player 可組合函式
如果您使用 media3-ui-compose-material3 程式庫中的 Player 可組合函式,系統預設會支援 D-Pad 導覽。Player 和 PlayerDefaults 元件具有自動 FocusRequester 執行個體,可透過 D-pad 遍歷元件,因此您不需要額外程式碼或 Modifier.focusRequester 來處理焦點和按鍵事件:
PlayerDefaults 會排列在頂端、中央和底部的插槽中,讓 D-Pad 導覽操作起來更直覺。如要自訂或覆寫這些插槽,請務必提供易於導覽的元件。請注意,大多數 Compose 元件 (例如包含按鈕的 Slider 或 Row) 都會直接管理焦點。