Одной из важных фич мобильных читалок книг является возможность быстрой блокировки текущей ориентации экрана. Вроде нет ничего сложного. Однако и тут есть свои подводные камни. При разработке Reedy мы в этом убедились.
Итак, что нужно для того, чтобы заблокировать текущую ориентацию:
1.
Определить её (с этим как раз часто возникает путаница);
2. Зафиксировать с
помощью метода setRequestedOrientation()
.
Разберём по порядку.
1. Определяем текущую ориентацию экрана
В общем случае всё просто:
val orientation = getResources().getConfiguration().orientation
Однако данный способ подойдёт только для каких-то не
слишком важных участков приложения. Например, когда выполнение кода связано с
подгружаемыми ресурсами, которые разные для портретного и ландшафтного режимов.
Хотя и в этом случае я бы не рискнул полностью полагаться на этот способ, так
как, по заверению товарища
из Apphance, на некоторых устройствах это поле иногда работает неверно, и
порой даже возвращает ORIENTATION_SQUARE
на заведомо неквадратных девайсах.
Поэтому он рекомендует (а я полностью поддерживаю) определять ориентацию, явно
проверяя соотношение ширины и высоты дисплея.