ناوبری با D-pad در اندروید تیوی
کنترل از راه دور تلویزیون اندروید دارای یک کنترل D-pad است که دستوراتی را که به عنوان رویدادهای کلیدی در dispatchKeyEvent(KeyEvent) از Activity شما میرسند، ارسال میکند. این موارد باید به PlayerView واگذار شوند:
کاتلین
override fun dispatchKeyEvent(event: KeyEvent?): Boolean { return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
جاوا
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
درخواست فوکوس برای PlayerView برای پیمایش کنترلهای پخش و رد کردن تبلیغات مهم است. درخواست فوکوس را در onCreate مربوط به Activity در نظر بگیرید:
کاتلین
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
جاوا
@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 قابل ترکیب استفاده کنید
اگر از Player composable از کتابخانه media3-ui-compose-material3 استفاده میکنید، پیمایش D-pad به طور پیشفرض پشتیبانی میشود. کامپوننتهای Player و PlayerDefaults دارای یک نمونه FocusRequester خودکار هستند که کامپوننتها را با D-pad پیمایش میکند، بنابراین برای مدیریت رویدادهای focus و key به کد اضافی یا Modifier.focusRequester نیاز ندارید:
PlayerDefaults در اسلاتهای بالا، وسط و پایین چیده شدهاند، بنابراین پیمایش با D-pad حس شهودی دارد. برای هرگونه سفارشیسازی و لغو این اسلاتها، مطمئن شوید که یک کامپوننت با قابلیت پیمایش خوب ارائه میدهید. توجه داشته باشید که اکثر کامپوننتهای Compose، مانند Slider یا Row که حاوی دکمه هستند، فوکوس را از همان ابتدا مدیریت میکنند.