Ответ 1
В соответствии с this Правила API для Android-плееров YouTube
Рекомендуется, чтобы вы обрабатывали изменения конфигурации, вызванные ориентации в вашей деятельности вручную, чтобы избежать повторного создания этого фрагмент каждый раз при изменении конфигурации. К лучшему пользовательский интерфейс, вы также должны вручную обрабатывать полноэкранное событие путем изменения макета вашей деятельности (см. второй вариант)
Как вы уже справляетесь с изменениями конфигурации, я вижу два возможных решения вашей проблемы.
- Установите setFullscreenControlFlags (к вашему объекту
YouTubePlayer
) вFULLSCREEN_FLAG_ALWAYS_FULLSCREEN_IN_LANDSCAPE
(Это приведет к тому, что плеер автоматически войдет в полноэкранный режим всякий раз, когда устройство войдет в альбомную ориентацию.) в сочетании сFULLSCREEN_FLAG_CONTROL_ORIENTATION
(Чтобы включить автоматическое управление ориентацией.).
Обратите внимание, что этот флаг должен быть установлен только в том случае, если ваша активность заблокирована портрет (и указан как таковой в манифесте).
Флаг полезен, если у вас нет ландшафтного макета для вашего деятельности, но хотел бы включить ландшафтную ориентацию исключительно для просмотр полноэкранного видео.
- Этот подход может решить вашу проблему, и это также предлагается официальной документацией, как я упоминал выше. В методе
setFullscreenControlFlags
установитеFULLSCREEN_FLAG_CUSTOM_LAYOUT
, который отключает обработчик полноэкранного макета по умолчанию, позволяя вам вручную управлять переходом на полноэкранный макет. Помимо возможности создания пользовательского полноэкранного макета, этот параметр также дает преимущество в том, что вы избегаете коррекции, возникающей в полноэкранном режиме по умолчанию.
Приложение, реализующее пользовательское полноэкранное поведение, должно обеспечить две вещи
То, что просмотр игрока занимает все свободное пространство при каждом вызове onFullscreen (boolean). Что активность не воссоздается, когда ориентация меняется на пейзаж. Чтобы достичь этого для деятельности, поддерживающей портрет, вы необходимо указать, что ваша активность обрабатывает некоторые изменения конфигурации самостоятельно в вашем заявлении, включая ориентацию, keyboardHidden и screenSize.
Смотрите здесь о том, как использовать этот флаг.
В соответствии с первой ссылкой , которую я поделил, этот второй подход позволит избежать воссоздания фрагментации каждый раз при изменении конфигурации. Также вам не нужно вызывать setContentView(...)
в onConfigurationChanged(...)
.
Надеюсь, это поможет вам.