Android TV

ניווט באמצעות כפתורי החיצים (D-pad) ב-Android TV

בשלט הרחוק של Android TV יש כפתורי חיצים (D-pad) ששולחים פקודות שמגיעות כאירועי מקשים ב-dispatchKeyEvent(KeyEvent) של ה-Activity. צריך להעביר את המשימות האלה ל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 כדי לנווט ברכיבי ה-UI להפעלה ולדלג על מודעות. כדאי לבקש להתמקד ב-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();
  // ...
}

אם אתם משתמשים ב-Compose ב-Android TV, אתם צריכים להגדיר את AndroidView כרכיב שאפשר להעביר אליו את המיקוד, ולהעביר את האירוע באמצעות הפרמטר של המשתנה ל-AndroidView בהתאם:

AndroidView(
  modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
  factory = { playerView },
)

שימוש ברכיב הקומפוזבילי Player

אם משתמשים ברכיב ה-Composable‏ Player מהספרייה media3-ui-compose-material3, הניווט באמצעות כפתורי החיצים נתמך כברירת מחדל. הרכיבים Player ו-PlayerDefaults כוללים מופע FocusRequester אוטומטי שעובר בין הרכיבים באמצעות כפתורי החיצים (D-pad), כך שלא צריך קוד נוסף או Modifier.focusRequester כדי לטפל באירועי מקשים ובאירועי מיקוד:

PlayerDefaults מסודרים בחלק העליון, המרכזי והתחתון, כך שהניווט באמצעות כפתורי החיצים (D-pad) מרגיש אינטואיטיבי. אם אתם מתאימים אישית את המיקומים האלה או משנים אותם, חשוב לוודא שאתם מספקים רכיב שקל לנווט בו. חשוב לציין שרוב הרכיבים של Compose, כמו Slider או Row שמכילים לחצנים, מנהלים את המיקוד באופן אוטומטי.