- Управление ориентацией экрана в android приложениях
- Как поменять ориентацию экрана вручную
- Блокировка ориентации экрана
- Пример android приложения
- Реализация автоматической ориентации экрана
- Реализация динамической смены шаблона при переориентации экрана
- Реализация блокировки автоматической ориентации экрана
- Как включить автоповорот экрана на чистом Android и Samsung
- Включение автоматического поворота экрана на телефонах Android
- Как включить автоповорот экрана на Samsung Galaxy
- Что делать, если автоповорот экрана не работает
- Видео инструкция
- Управляем ориентацией устройства в Android
- Шаг 1
- Шаг 2
- Шаг 3
- Шаг 4
- Что такое ориентация в телефоне и как её менять?
- Что такое автоповорот?
- Зачем нужно отключать автоповорот на телефоне?
- А как же ориентацию переключать?
- Как включить датчик автоповорота в настройках
- Калибровка акселерометра
- Перезагрузка
- Как поменять ориентацию экрана вручную
- Блокировка ориентации экрана
- Вступление
- Проблемы с автоповоротом
- Повторная активация
- Установка прошивки
- Стороннее приложение
- Пример 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 объявим методы, которые будут вызываться при нажатии на кнопки.
Шаблон нашего приложения имеет вид:
activity_main.xml
Внутри класса MainActivity определим эти методы.
Реализация автоматической ориентации экрана
Создайте файл шаблона activity_automatic.xml в папке res/layout-land. Этот файл определяет вид экрана при альбомной ориентации.
Аналогичный файл для книжной ориентации создадим в папке res/layout-port. Обратите внимание, что TextView имеет разные цвета.
Для реализации автоматического изменения шаблона создадим класс AutomationOrientation. Внутри класса мы просто связываем с activity xml файл.
Реализация динамической смены шаблона при переориентации экрана
Давайте теперь создадим Activity, внетри которого смена ориентации экрана будет происходить динамически. Создадим в папке layout два файла activity_dynamic_land.xml и activity_dynamic_port.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.
Источник
Как включить автоповорот экрана на чистом Android и Samsung
В этой инструкции подробно о том, как включить автоповорот экрана при изменении ориентации устройства на телефонах с Android: сначала на чистой системе, а затем на смартфонах Samsung Galaxy.
Кроме этого, будут рассмотрены причины того, что автоматический поворот экрана не работает и дополнительные нюансы, связанные с этой функцией системы. Инструкция сопровождается видео, где все описанные шаги показаны наглядно.
Включение автоматического поворота экрана на телефонах Android
Включить автоповорот экрана при изменении положения устройства на Android можно двумя способами: с помощью специального элемента в пункте управления области уведомлений или в настройках. Сначала о включении функции при изменении положения устройства на смартфонах с чистой системой Android, что вполне применимо и к модифицированным системам:
- Базовый способ включить автоповорот — полностью раскрыть элементы управления в области уведомлений, найти среди доступных кнопок пункт «Автоповорот», «Книжный экран» или аналогичную и нажать по ней.
- Если такая кнопка не отображается, учитывайте, что список кнопок часто можно листать и, помимо этого — менять набор кнопок, скрывая одни и показывая другие: как правило для редактирования набора кнопок используется значок с изображением «карандаша» в области уведомлений, как на изображении ниже, иногда — нужно открыть меню в полностью раскрытой области уведомлений и найти пункт для изменения порядка или набора кнопок там.
- Если вы не можете найти такой кнопки, есть дополнительная возможность включить рассматриваемую функцию (точные названия пунктов на разных телефонах и в зависимости от версии Android могут слегка отличаться): зайдите в Настройки — Экран (или Дисплей), раскройте пункт «Дополнительно» (при его наличии) и найдите переключатель «Автоповорот экрана», включите его.
- На некоторых смартфонах этот пункт настроек продублирован в разделе «Специальные возможности».
После того, как функция была включена (кнопка активирована), ориентация экрана должна начать меняться автоматически.
Для автоповорота существуют ограничения, а также дополнительные особенности работы устройства, которые могут влиять на использование функции, подробно о которых в разделе о том, что делать, если автоматическое изменение ориентации с портретной (книжной) на альбомную и наоборот не работает.
Как включить автоповорот экрана на Samsung Galaxy
Для включения автоповорота экрана на Samsung доступны две возможности — включение кнопкой в пункте управления в области уведомления и в параметрах экрана, рассмотрим каждую из них:
- Раскройте область уведомлений во всю высоту экрана и найдите кнопку «Книжный экран» (или Альбомный) — она станет выделенной, а её название изменится на «Автоповорот» (если кнопка уже так называется, то функция включена). Если кнопка не отображается — попробуйте пролистать список доступных элементов управления вправо.
- Если кнопки «Книжный экран» нет, в области уведомлений нажмите по кнопке меню, выберите пункт «Порядок кнопок» и просмотрите список неактивных кнопок в верхней части экрана: если среди них есть нужная, перетащите её в нижнюю часть и нажмите «Готово», теперь функцию можно включать и отключать методом из первого пункта.
- Второй способ включения автоматического поворота на Samsung — соответствующая опция в параметрах. Зайдите в Настройки — Дисплей — Главный экран. Включите пункт «Переход в альбомный режим» для автоматического изменения ориентации экрана.
Дополнительная возможность на телефонах Samsung позволяет поворачивать экран даже в тех случаях, когда автоповорот отключен: в отдельных приложениях, например, в браузере или галерее при повороте устройства в навигационной панели появится кнопка с изображением телефона, при нажатии на которую ориентации экрана будет изменена с вертикальной на горизонтальную или наоборот.
Что делать, если автоповорот экрана не работает
Если даже при включенной функции изменения ориентации экрана, автоповорот не работает, следующие моменты могут помочь решить проблему или разобраться в ситуации:
- На большинстве телефонов автоповорот не работает для главного экрана, а на некоторых, например, для рассмотренного Samsung — и для списка приложений, такое же поведение может наблюдаться и для других системных элементов.
- Отдельные приложения блокируют ориентацию экрана: например, Instagram на телефоне будет работать только в вертикальном положении.
- Включении функции экономии заряда батареи: в области уведомлений, на Samsung в меню Настройки — Обслуживание устройства — Батарея, на чистом Android — в Настройки — Батарея, может снижать частоту опроса сенсора, который служит для определения положения устройства в пространстве, в результате автоповорот может срабатывать не всегда.
- Отдельные приложения для экономии заряда батареи, а также, теоретически, антивирусы, могут отключать сенсоры ориентации, гироскопы, акселерометры устройства. При наличии таких приложений, изучите их параметры.
- Можно проверить, работает ли автоматический поворот, если зайти в безопасный режим Android — если в этой ситуации функция исправна, можно сделать вывод, что причиной является какое-то стороннее приложение.
Не часто, но случается, что причиной проблемы оказывается не что-то программное, а аппаратные неисправности смартфона, такую возможность также следует учитывать.
Видео инструкция
Если после прочтения материала остались вопросы, связанные с рассмотренной темой, задавайте их в комментариях, решение может найтись.
Источник
Управляем ориентацией устройства в Android
Вы наверное на раз замечали что некоторые приложения работаю в горизонтальном положении устройства, а некоторый в вертикальном, или же переворачивая устройство приложение само меняет позиционирование Layout и всех компонентов. Именно об этом пойдет речь в этом уроке.
Вам стоит знать что существует 3 режима отображения:
3. Квадратный (уже не используется)
Как видите портретный режим более привычный телефонам а альбомный планшетам.
Шаг 1
Давайте теперь разберемся как же позиционировать UI компоненты.
Допустим у вас есть следующий набор компонентов на main.xml:
Выглядеть данный Layout будет в портретном виде так:
Теперь перед нами зада сделать так чтобы, когда устройство переворачивается горизонтальное положение (в альбомный вид), то делать расположение элементов на layout следующим:
Для этого нам достаточно в папке DetectOrientationDevice\res создать папку layout-land и в ней создать точно такой же layout как и первый наш main.xml:
Как видите мы расположили на этом layout компоненты так как бы хотели их видеть в альбомном виде.
После этих изменений мы увидим что при изменении ориентации устройства мы будем видеть разные компоновки layout.
Структура проекта:
Как вы видите есть стандартная папка layout и в ней наш main.xml и есть еще одна папка, которую мы добавили layout-land именно в ней мы создаем второй файл UI который и будет отображать альбомный вид.
Шаг 2
Теперь рассмотрим пример как программно определить текущую ориентацию устройства.
Давайте В классе MainActivity напишем метод, который будет определять положение устройства:
В 3-й строке мы получаем конфигурации ресурсов, с которых будем получать ориентацию, и в строке 4 и 7 мы проверяем ориентацию и выполняем соответствующее действие.
Дальше в res\layout\main.xml и res\layout-land\main.xml нужно для кнопки с id=”@+id/button1” добавить:
и после нажатия на ‘Кнопка №1‘ будет показываться в каком положении устройство:
Вот так у нас должно работать определение ориентации, но устройство можно повернуть в любую сторону, и какже этим управлять? С этим мы разберемся в следующем шаге.
Шаг 3
Давайте в класс MainActivity допишем еще один метод в класс который будет определять куда повернуто устройство:
В 3-й строке мы получаем ориентацию с ресурсов.
И поставим на кнопку с id=“@+id/button2” обработчик на этот метод:
не забудьте также во втором layout поставить этот обработчик.
Шаг 4
Теперь научимся делать фиксированную ориентацию.
Давайте зайдем в MainActivity и допишем в метод onCreate одну строку:
в 6-й строке мы программно ставим альбомный вид.
Описание всех ориентаций ActivityInfo можно посмотреть тут.
Или же можно задать это ограничение в AndroidManifest.xml:
В строке 3 мы указываем что отображение будет только в альбомном виде.
Источник
Что такое ориентация в телефоне и как её менять?
Что такое автоповорот?
Если функция автоповорота экрана включена, то при изменении угла наклона экрана телефона будет автоматически меняться режим изображения из портретного в ландшафтный и наоборот.
Если говорить простым языком, при повороте экрана поворачивается и изображение вместе с ним.
Зачем нужно отключать автоповорот на телефоне?
- Экономия заряда батареи . Такой пустяк, а расходует заряд батареи. Дело в том, что в телефонах с Android 9 и выше программа не просто регулярно считывает положение экрана с помощью нескольких датчиков, но еще и анализирует поведение человека, чтобы не поворачивать экран тогда, когда это не нужно.
- Когда используется TalkBack или другие озвучивающие сервисы , например, читалка FBReader. При повороте экрана текст элементарно будет прерываться, что неудобно и начинает раздражать.
- При использовании телефона лежа на кровати . Ведь не так легко держать смартфон на вытянутых руках в течение нескольких часов, даже лежа. Поэтому всегда можно положить его на кровать ребром. Но вот проблема: моментально активируется ландшафтный режим. Чтобы этого не происходило, рекомендуется отключать автоповорот. Ведь это неудобно.
А как же ориентацию переключать?
Например, есть сайт, открытый в Chrome для Android. Этот браузер позволяет менять ориентацию со стандартной (вертикальной) на альбомную. Текста при альбомной ориентации будет помещаться больше, и читать его будет удобнее (шрифт также будет масштабнее) Но как поменять ориентацию при выключенном автоповороте?
Есть два способа. Первый — на время включить автоповорот, дождаться смены ориентации, выключить автоповорот.
Второй подойдет тем людям, у которых на телефоне стоит “чистый” Android версии 9 и выше. В таком случае при повороте экрана появляется маленькая кнопочка там же, где расположены кнопки навигации. Она и предлагает повернуть экран.
Как включить датчик автоповорота в настройках
Обычно автоповорот включается в шторке уведомлений, но иногда оттуда пропадает соответствующая иконка. Чтобы включить датчик, сделайте несколько простых шагов:
1. Зайдите в «Настройки» смартфона.
2. Выберите раздел «Экран».
3. Активируйте пункт «Автоповорот экрана».
Если сбой не связан с какими-либо серьезными ошибками, то функция после этого должна заработать.
Калибровка акселерометра
За поворот экрана отвечает акселерометр, работа которого иногда нарушается физическими или программными сбоями.
Иногда калибровка акселерометра слетает после обновления MIUI.
Чтобы откалибровать акселерометр:
1. Зайдите в номеронабиратель и наберите код *#*#6484#*#*, чтобы попасть в инженерное меню.
2. Найти пункт «Accelerator» или «Accelerometer sensor».
3. Наклонять телефон в разные стороны, пока на дисплее не высветятся стрелки.
4. Положить устройство на ровную горизонтальную поверхность и нажать кнопку «Calibration».
5. Дождаться, пока система отобразит надпись «Сalibration success».
6. После этих манипуляций автоповорот должен заработать.
На новых версиях MIUI в инженерном меню есть только теты для проверки работоспособности датчиков.
Перезагрузка
Как ни банально, но зачастую избавиться от проблемы помогает обычная перезагрузка смартфона. Иногда приходится применять более радикальные меры.
Попробуйте сбросить все настройки:
- Сохраните свои личные данные и файлы.
- Зайдите в «Настройки» и перейдите к «Расширенным настройкам».
- Выберите раздел «Восстановление и сброс».
- Нажмите пункт «Сброс настроек» и удалите все файлы на телефоне.
В самых сложных ситуациях помогает только перепрошивка.
Если вы продвинутый пользователь, прошейте смартфон привычным для вас способом (MiFlash, ADB и др.)
Остальные пользователи могут попробовать переустановить обновление MIUI через «три точки»:
- Зайдите в «Настройки» и выберите раздел «О телефоне».
- Откройте пункт «Обновление системы».
- Нажмите на три точки в правом верхнем углу дисплея и скачайте полную прошивку.
После переустановки последней версии MIUI проблема с автоповоротом часто исчезает.
Как поменять ориентацию экрана вручную
Если вы хотите управлять сменой шаблона вручную, Вам необходимо воспользоваться методами, предоставляемыми классом Configuration. Объект этого класса передается в качестве параметра в метод onConfigurationChanged, который вызывается при изменении одного из параметров, определенного атрибутами Activity в файле AndroidManifest.xml. Чтобы перехватывать смену ориентации Вам нужно задать атрибут android:configChanges в знаение orientation в файле манифеста. Если этого не сделать, то метод onConfigurationChanged не будет вызываться при смене ориентации устройства.
Блокировка ориентации экрана
Иногда нам требуется запретить смену ориентации. Например, для длинного списка предпочтительной является книжная ориентация, поскольку в этом случае на экране уместится большее количество информации. Вы можете ограничить ориентацию эерана для своей activity с помощью атрибута android:screenOrientation. Этот атрибут можно указать в AndroidManifest.xml. android_screenOrientation=”landscape” – альбомная ориентация, android_screenOrientation=”portrait” – книжная ориентация. Если Вы ограничиваете свое приложение одной ориентацией, то шаблон должен располагаться в папке res/layout.
Вступление
Когда создавались первые портативные устройства – КПК и смартфоны, то за основу бралась настольная операционная система и допиливалась под мобильное устройство. Лишние функции удалялись, а некоторые функции добавлялись. Но при этом как-то совсем упустили из виду, что в отличие от громоздких мониторов и экранов ноутбуков, карманные устройства можно вращать в руках. Первые устройства не умели менять ориентацию экрана. Некоторые программисты самостоятельно стали создавать программы, которые умели переключаться в разные режимы. Затем эту возможность стали включать в настройки аппарата. Позже аппараты научились самостоятельно определять ориентацию экрана.
Всего существует два режима – портретный и альбомный. На большинстве телефонов используется по умолчанию портретный режим (как на паспорте). Альбомный режим знаком нам по обычным мониторам.
Рассмотрим следующий случай. Предположим, у нас в приложении имеется одно текстовое поле и шесть кнопок. Вроде всё нормально.
Но стоит нам повернуть устройство на 90 градусов (для эмулятора нужно нажать комбинацию клавиш Ctrl+F11), как сразу обнаруживаются проблемы. Пятая кнопка видна частично, а шестая вообще оказалась за пределами видимости. Непорядок!
Чтобы избежать такой проблемы, необходимо как-то по другому скомпоновать кнопки. Например, расположить их не подряд друг за другом, а разбить на пары. Воспользуемся контейнером TableLayout. С его помощью мы можем разбить кнопки на две колонки и поместить их в три ряда.
Для этой операции нам понадобится сделать несколько важных шагов. Сначала нужно создать новую подпапку в папке res. Выделяем папку res, вызываем из него контекстное меню и последовательно выбираем команды New | Android resource directory. В диалоговом окне из выпадающего списка Resource type: выбираем layout. В списке Available qualifiers: находим элемент Orientation и переносим его в правую часть Chosen qualifiers: с помощью кнопки с двумя стрелками. По умолчанию у вас появится имя папки layout-port в первой строке Directory Name:. Но нам нужен альбомный вариант, поэтому в выпадающем списке Screen orientation выбираем Landscape. Теперь название папки будет layout-land.
Можно обойтись без помощи мастера, создав папку сразу через меню New | Directory. Этот способ годится для опытных разработчиков, которые знают, как следует назвать папку. Важно запомнить, что имя даётся не произвольно, а именно в таком виде layout-land. По суффиксу -land система понимает, что речь идет о новом режиме. Теперь нам осталось создать в созданной папке новый XML-файл activity_main.xml. Вызываем контекстное меню у папки layout-land и выбираем команды New | Layout Resource File. В диалоговом окне присваиваем имя activity_main.xml, которое должно совпадать с именем существующего файла. Во втором поле вводим LinearLayout, по мере ввода появится подсказка, облегчающая выбор.
Откроем созданный файл и модифицируем его следующим образом.
Запускаем приложение и проверяем. Отлично, теперь видны все кнопки. Поздравляю, вы гений!
Когда вы создаёте альтернативную разметку, то не забывайте включать все компоненты, к которым будете обращаться программно, иначе получите ошибку. Допустим, вы забыли добавить шестую кнопку. В портретном режиме программа будет работать, а когда пользователь перевернёт экран, то активность будет инициализировать все компоненты для работы, а кнопки-то и нет.
Проблемы с автоповоротом
Иногда «Ориентация» работает не корректно, либо не работает вовсе. Поворот изображения может зависать, не возвращаться в исходное положение, либо картинка может не поворачиваться вообще. Первым делом нужно проверить активацию кнопки.
Если она включена, но проблема не решена, следует исключить сбои в самом приложении. Причиной поломки может быть кратковременный сбой системы. В таком случае можно перезагрузить телефон. После этого автоповорот начинает функционировать в штатном режиме.
Если перезагрузка не помогла, то стоит сделать полный сброс настроек смартфона до заводских. Предварительно нужно выполнить резервное копирование файлов, размещенных в памяти гаджета. Возобновить ориентацию изображения поможет обновление операционной системы на актуальную версию.
Если ни один из перечисленных способов не помог решить проблему, значит нужно обратиться к специалисту, который проведет профессиональную диагностику. Либо выполнить ее самостоятельно.
Повторная активация
Вызовите шторку уведомлений , в которой появится быстрое меню. Найдите в нём пункт «Ориентация». Если он закрашен синим цветом, значит, заблокирован. Нажмите, чтобы он стал бледным, в этом положении автоповорот должен работать.
Для уверенности нажмите на иконку несколько раз подряд с паузой около одной секунды. Проверьте работоспособность.
Установка прошивки
В редких случаях поломка автоповорота в MIUI 11 происходит в результате ошибочной установки новой версии прошивки. Вам необходимо установить полную версию.
Не волнуйтесь, операция произойдёт автоматически без потери данных, вам лишь нужно убедиться, что интернет позволит беспрепятственно скачать около 2 Гб данных и убедитесь, что аккумулятор заряжен более чем на 70%.
Стороннее приложение
Если экран всё ещё не реагирует на изменение положение телефона, остаётся констатировать поломку микросхемы с датчиком. Телефон необходимо отдать в ремонт в сертифицированный сервисный центр.
Как временное решение возможно использовать приложение Rotation Control. Оно не сможет вращать дисплей автоматически, но даст вам возможность делать это нажатием специальной кнопки.
Пример android приложения
Давайте создадим проект, в котором продемонстрируем различные способы изменения шаюлона экрана при смене ориентации. Приложение судет состоять из трех кнопок, при нажатии на которые будет открываться activity, в которой будет реализован тот или иной способ работы с ориентацией. Внутри шаблона приложения с помощью атрибута android:onClick объявим методы, которые будут вызываться при нажатии на кнопки.
Шаблон нашего приложения имеет вид:
activity_main.xml
Внутри класса MainActivity определим эти методы.
Реализация автоматической ориентации экрана
Создайте файл шаблона activity_automatic.xml в папке res/layout-land. Этот файл определяет вид экрана при альбомной ориентации.
layout-land/activity_automatic.xml
Аналогичный файл для книжной ориентации создадим в папке res/layout-port. Обратите внимание, что TextView имеет разные цвета.
Источник