#android #screen-orientation #autorotate #device-orientation #onconfigurationchanged
Вопрос:
Я хочу добиться того, как youtube обрабатывает свою ориентацию видео.
Есть несколько вещей, которые нужно иметь в виду, прежде чем просто сказать, что я должен использовать onConfigurationChanged.
О ЧЕМ СЛЕДУЕТ ПОДУМАТЬ
- Ориентация телефона. Это означает, как вы держите телефон. Это может быть ПОРТРЕТ или ПЕЙЗАЖ
- Ориентация экрана. Это означает, как отображается представление. Это может быть ПОРТРЕТ или ПЕЙЗАЖ, независимо от ориентации телефона
КАК РАБОТАЕТ РОТАЦИЯ НА YOUTUBE?
- Если телефон находится в ПОРТРЕТНОМ режиме (с помощью быстрых настроек ОС)
- Экран будет сохраняться в ПОРТРЕТНОМ режиме. Не имеет значения, поворачиваете ли вы телефон
- Единственный способ повернуть экран-это нажать кнопку повернуть.
- Экран будет оставаться в последней выбранной ориентации, и она не изменится, даже если вы повернете телефон. ПОРТРЕТ останется ПОРТРЕТОМ, а ПЕЙЗАЖ останется ПЕЙЗАЖЕМ.
- Если телефон находится в режиме АВТОМАТИЧЕСКОГО ПОВОРОТА
- если вы поворачиваете телефон, за ним следует поворот экрана. Я имею в виду, что если телефон находится в ПОРТРЕТНОМ режиме, то экран будет ПОРТРЕТНЫМ. И то же самое происходит с ЛАНДШАФТОМ.
- если нажать кнопку поворота, ориентация экрана изменится независимо от ориентации телефона. В этом случае единственный способ прослушать ориентацию датчика-повернуть телефон в ту же сторону поворота экрана и вернуться назад. Это делается для того, чтобы датчик телефона снова мог контролировать ориентацию.
ЧТО У МЕНЯ ЕСТЬ?
С помощью onConfigurationChanged я мог бы знать, когда поворачиваю телефон (если включен АВТОМАТИЧЕСКИЙ ПОВОРОТ), и определить макет:
override fun onConfigurationChanged(newConfig: Configuration) {
when (newConfig.orientation) {
Configuration.ORIENTATION_PORTRAIT -> buildPortrait()
Configuration.ORIENTATION_LANDSCAPE -> buildLandscape()
}
super.onConfigurationChanged(newConfig)
}
С помощью кнопки поворота я могу управлять ориентацией экрана (когда телефон находится в ПОРТРЕТНОМ режиме, ЗАБЛОКИРОВАННОМ ОС).
fun rotate() {
val orientation = requireActivity().requestedOrientation
val isRotationOn = Settings.System.getInt(requireActivity().contentResolver,
Settings.System.ACCELEROMETER_ROTATION, 0) == 1
requireActivity().requestedOrientation = if (isRotationOn) {
// AUTO-ROTATE enabled
TODO()
} else
// PORTRAIT BLOCKED
if (orientation == PORTRAIT) {
buildLandscape()
LANDSCAPE
} else {
buildPortrait()
PORTRAIT
}
}
WHAT I CAN’T ACHIEVE?
I don’t know how to handle screen rotation when I have the AUTO-ROTATE enabled that handles the rotation by the sensor, and at the same time, there is a rotate button that does a rotation regardless of the AUTO-ROTATE.
IMPORTANT: I can’t find any example with the solution anywhere.