Управління орієнтацією екрана в 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 оголосимо методи, які будуть викликатися при натисканні на кнопки.

Шаблон нашого застосування має вигляд:
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
Переклад: Олександр льодком