Управління орієнтацією екрана в android додатках

Управління орієнтацією екрана в android додатках
При розробці мобільних додатків зі складним дизайном непоодинокі випадки, коли при зміні орієнтації екрану все виглядає зовсім не так, як Вам хотілося б. У таких випадках виходом із ситуації може стати використання різних шаблонів для книжкової та альбомної орієнтації пристрою. При цьому перемикання між шаблонами може здійснюватися в автоматичному або динамічному (ручному) режимі.

Перший спосіб дуже простий. Ви створюєте різні версії файлу шаблонів для випадку портретному та ландшафтному режимі і ставите їх в папки res / layout-land для книжкової та res / layout-port для портретної орієнтації.

Як поміняти орієнтацію екрану вручну

Якщо ви хочете керувати зміною шаблону вручну, Вам необхідно скористатися методами, наданими класом Configuration. Об'єкт цього класу передається в якості параметра в метод onConfigurationChanged, який викликається при зміні одного з параметрів, визначеного атрибутами Activity в файлі AndroidManifest.xml. Щоб перехоплювати зміну орієнтації Вам потрібно задати атрибут android: configChanges в знаеніе orientation в файлі маніфесту. Якщо цього не зробити, то метод onConfigurationChanged не викликатиме при зміні орієнтації пристрою.

Блокування орієнтації екрану

Іноді нам потрібно заборонити зміну орієнтації. Наприклад, для довгого списку кращою є книжкова орієнтація, оскільки в цьому випадку на екрані вміститься більшу кількість інформації. Ви можете обмежити орієнтацію еерана для своєї activity за допомогою атрибута android: screenOrientation. Цей атрибут можна вказати в AndroidManifest.xml. android: screenOrientation = "landscape" - альбомна орієнтація, android: screenOrientation = "portrait" - книжкова орієнтація. Якщо Ви обмежуєте свій додаток однією орієнтацією, то шаблон повинен розташовуватися в папці res / layout.

Приклад android додатки

Давайте створимо проект, в якому продемонструємо різні способи зміни шаюлона екрану при зміні орієнтації. Додаток Судет складатися з трьох кнопок, при натисненні на які буде відкриватися activity, в якій буде реалізований той чи інший спосіб роботи з орієнтацією. Всередині шаблону додатки за допомогою атрибута android: onClick оголосимо методи, які будуть викликатися при натисканні на кнопки.

Управління орієнтацією екрана в android додатках

Шаблон нашого застосування має вигляд:
activity_main.xml


Усередині класу MainActivity визначимо ці методи.

Реалізація автоматичної орієнтації екрану

Створіть файл шаблону activity_automatic.xml в папці res / layout-land. Цей файл визначає вид екрану при альбомної орієнтації.

Аналогічний файл для портретів створимо в папці res / layout-port. Зверніть увагу, що TextView має різні кольори.


Для реалізації автоматичної зміни шаблону створимо клас AutomationOrientation. Усередині класу ми просто пов'язуємо з activity xml файл.

Реалізація динамічної зміни шаблону при переорієнтації екрану


Тепер створимо клас DynamicOrientationDetection, в якому будемо визначати поточну орієнтацію екрану і вибір відповідного шаблону. У цьому класі ми переобумовленої метод onConfigurationChanged. У файл AndroidManifest.xml додамо поле android: configChanges = "orientation". Це забезпечить виклик методу onConfigurationChanged при зміні орієнтації екрану. Код AndroidManifest.xml наведено в самому кінці статті.

Реалізація блокування автоматичної орієнтації екрану

Нарешті займемося Activity, в якій заборонено реагувати на зміну орієнтації пристрою. Зробимо так, щоб в додатку завжди використовувалася альбомна орієнтація. Задамо в AnroidManifest.xml атрибут android: screenOrientation = "landscape" і створимо файл шаблону в папці res / layout

Клас RestrictedOrientation має вигляд

Після додавання всіх actiity в файл AndroidManifest.xml він повинен мати вигляд
AnroidManifest.xml

Вихідний файл проекту можна завантажити з репозіторіяgithub / Code4Reference.

Оригінал: Orientation specific layouts
Переклад: Олександр льодком