Android: Блокировка текущей ориентации экрана

Одной из важных фич мобильных читалок книг является возможность быстрой блокировки текущей ориентации экрана. Вроде нет ничего сложного. Однако и тут есть свои подводные камни. При разработке Reedy мы в этом убедились.

Итак, что нужно для того, чтобы заблокировать текущую ориентацию:
1. Определить её (с этим как раз часто возникает путаница);
2. Зафиксировать с помощью метода setRequestedOrientation().

Разберём по порядку.

1. Определяем текущую ориентацию экрана

В общем случае всё просто:

val orientation = getResources().getConfiguration().orientation

Однако данный способ подойдёт только для каких-то не слишком важных участков приложения. Например, когда выполнение кода связано с подгружаемыми ресурсами, которые разные для портретного и ландшафтного режимов. Хотя и в этом случае я бы не рискнул полностью полагаться на этот способ, так как, по заверению товарища из Apphance, на некоторых устройствах это поле иногда работает неверно, и порой даже возвращает ORIENTATION_SQUARE на заведомо неквадратных девайсах. Поэтому он рекомендует (а я полностью поддерживаю) определять ориентацию, явно проверяя соотношение ширины и высоты дисплея.

Читать далее »