- Андроид как изменить положение экрана
- Повороты экрана в Android без боли
- Предисловие
- Когда начались проблемы?
- Возможное решение
- Да начнется магия
- Реализация приложения
- Управляем ориентацией устройства в Android
- Шаг 1
- Шаг 2
- Шаг 3
- Шаг 4
- Как включить или выключить поворот экрана на Андроид
- Стоит ли активировать автоповорот экрана?
- Как на Андроиде настроить поворот экрана?
- Дополнительные возможности
Андроид как изменить положение экрана
Наиболее понятный и настраиваемый менеджер ориентаций экранов устройств для Android. Позволяет снимать Full Control ориентации настроек устройства. Вращение по требованию позволяет выбрать поворот экрана на лету без необходимости переключения в приложение в первую очередь. Программа предлагает все режимы, которые поддерживает Android, и вы можете также переопределить каждый в настройках приложения, чтобы повернуть в соответствии с вашими потребностями. Приложение имеет встроенный учебник (в том числе на русском языке).
Языки:
— Английский, немецкий, французский, турецкий, китайский (упрощенный)
Поддерживаемые режимы:
Режимы системы по умолчанию
* Авто-поворот Вкл
* Автоповорот Off
Другие режимы переопределяют настройки системы
* Принудительный автоматический поворот
* Принудительный Портрет
* Принудительный Пейзаж
* Обратный Портрет
* Обратный Пейзаж
* Датчик Пейзаж
* Принудительный «Полный Датчик»
Блокировка:
— Блокировка текущей ориентации
Настройки приложения:
* Указана ориентация для отдельных приложений
* Указан Экран блокировки, Телефонный звонок, зарядки, гарнитуры и док ориентации
Поворот по требованию:
* Плавающий пузырь: — полностью настраиваемый «пузырь» остается на вершине каждого приложения, чтобы изменить ориентацию приложения
* Быстрый уведомление: — Изменение ориентации переднего плана приложение от уведомления
Уведомления:
* Включить для бесперебойной работы
* Выбор действия по нажатию
* Добавить быстрый переключатель изменения ориентации
Виджеты:
* Полностью настраиваемый с экрана блокировки поддержки (Android 4.2.2+)
* Сервис виджет: Переключить службы
* Режим виджет: Переключение между двумя выбранными режимами
* Динамическое виджет: Добавляет переключение в соответствии с вашими потребностями
Пользовательский интерфейс:
* Светлые и темные базовые темы
* Настройка цвета с помощью Rotation тематических акцентов. Поддержка тематических акцентов Xperia ™
* Выберите один из двух наборов значков по умолчанию и в перевернутом стиле
Другие особенности:
* Вращение Автоматизация: — Tasker / Locale поддержка плагинов для автоматизации более 20 действий
* Вращение Ярлыки: — Добавить полностью настраиваемые горячие на главный экран
* Начните при загрузке: — Запустить сервис вращения при загрузке
* Вибрация: — Для уведомления, когда ориентация экрана меняется с настраиваемым длиной вибрации
* Помощь и информация: — Подробная информация о режимах ориентации и легко понять Учебник
* Опция удаления в приложение
В встроенная поддержка: —
* Резервное копирование и восстановление
* Сброс настроек в приложение
* Перезапустить программу, если она не ведет себя должным образом
ВНИМАНИЕ:
— Нет рекламы
— Не требуется интернет разрешение
— Это приложение не требует прав суперпользователя.
— Некоторые приложения могут не отображаться правильно, когда вынуждены работать в режиме книжная / альбомная. Используйте Автоповорот On / Off в настройках приложения использовать системные настройки для этих приложений.
Key 2021: Rotation — Orientation Manager (Пост Katafrakt #102554915)
Key: Rotation+Key+v3.0.apk ( 25.36 КБ )
Источник
Повороты экрана в Android без боли
Важно!
Изначально в статье была реализация с ошибкой. Ошибку исправил, статью немного поправил.
Предисловие
Истинное понимание проблем каждой платформы приходит после того, как попробуешь писать под другую платформу / на другом языке. И вот как раз после того, как я познакомился с разработкой под iOS, я задумался над тем, насколько ужасна реализация поворотов экрана в Android. С того момента я думал над решением данной проблемы. Попутно я начал использовать реактивное программирование везде, где только можно и уже даже не представляю как писать приложения по-другому.
И вот я узнал про последнюю недостающую деталь — Data Binding. Как-то эта библиотека прошла мимо меня в свое время, да и все статьи, что я читал (что на русском, что на английском) рассказывали не совсем про то, что мне было необходимо. И вот сейчас я хочу рассказать про реализацию приложения, когда можно будет забыть про повороты экранов вообще, все данные будут сохраняться без нашего прямого вмешательства для каждого активити.
Когда начались проблемы?
По настоящему остро я почувствовал проблему, когда в одном проекте у меня получился экран на 1500 строк xml, по дизайну и ТЗ там было целая куча различных полей, которые становились видимыми при разных условиях. Получилось 15 различных layout’ов, каждый из которых мог быть видимым или нет. Плюс к этому была еще куча различных объектов, значения которых влияют на вьюху. Можете представить уровень проблем в момент поворота экрана.
Возможное решение
Сразу оговорюсь, я против фанатичного следования заветам какого-либо подхода, я пытаюсь делать универсальные и надежные решения, несмотря на то, как это смотрится с точки зрения какого-либо паттерна.
Я назову это реактивным MVVM. Абсолютно любой экран можно представить в виде объекта: TextView — параметр String, видимость объекта или ProgressBar’а — параметр Boolean и т.д… А так же абсолютно любое действие можно представить в виде Observable: нажатие кнопки, ввод текста в EditText и т.п…
Вот тут я советую остановиться и прочитать несколько статей про Data Binding, если еще не знакомы с этой библиотекой, благо, на хабре их полно.
Да начнется магия
Перед тем как начать создавать нашу активити, создадим базовые классы для активити и ViewModel’ли, где и будет происходить вся магия.
Update!
После общения в комментариях, осознал свою ошибку. Суть в том, что в моей первой реализации ничего не сериализуется, но все работает при поворотах экрана, да даже при сворачивании, разворачивании экрана. В комментариях ниже обязательно почитайте почему так происходит. Ну а я исправлю код и поправлю комментарии к нему.
Для начала, напишем базовую ViewModel:
Я уже говорил, что все что угодно можно представить как Observable? И библиотека RxBinding отлично это делает, но вот беда, мы работает не напрямую с объектами, типа EditText, а с параметрами типа ObservableField. Что бы радоваться жизни и дальше, нам необходимо написать функцию, которая будет делать из ObservableField необходимый нам Observable RxJava2:
Тут все просто, передаем на вход ObservableField и получаем Observable RxJava2. Именно для этого мы наследуем базовый класс от BaseObservable. Добавим этот метод в наш базовый класс.
Теперь напишем базовый класс для активити:
Я постарался подробно прокомментировать код, но заострю внимание на нескольких вещах.
Активити, при повороте экрана всегда уничтожается. Тогда, при восстановлении снова вызывается метод onCreate. Вот как раз в методе onCreate нам и нужно восстанавливать данные, предварительно проверив, сохраняли ли мы какие-либо данные. Сохранение данных происходит в методе onSaveInstanceState.
При повороте экрана нас интересует порядок вызовов методов, а он такой (то, что интересует нас):
1) onDestroy
2) onSaveInstanceState
Что бы не сохранять уже не нужные данные мы добавили проверку:
Дело в том, что метод isFinishing вернет true только если мы явно вызвали метод finish() в активити, либо же ОС сама уничтожила активити из-за нехватки памяти. В этих случаях нам нет необходимости сохранять данные.
Реализация приложения
Представим условную задачу: нам необходимо сделать экран, где будет 1 EditText, 1 TextView и 1 кнопка. Кнопка не должна быть кликабельной до тех пор, пока пользователь не введет в EditText цифру 7. Сама же кнопка будет считать количество нажатий на нее, отображая их через TextView.
Update!
Пишем нашу ViewModel:
Update
Вот тут и и были самые большие проблемы. Все работало и при старой реализации, ровно до того момента, пока в настройках разработчика не включить параметр «Don’t keep activities».
Что бы все работало как надо, необходимо реализовывать интерфейс Parcelable для ViewModel. По поводу реализации ничего писать не буду, только уточню еще 1 момент:
Данные-то мы возвращаем, а вот Observable мы теряем. Поэтому пришлось выводить в отдельный метод и вызывать его во всех конструкторах. Это очень быстрое решение проблемы, не было времени подумать лучше, нужно было было указать на ошибку. Если у кого-то есть идеи как реализовать это лучше, пожалуйста, поделитесь.
Теперь напишем для этой модели view:
Ну и теперь, мы пишем нашу активити:
Запускаем приложение. Кнопка не кликабельна, счетчик показывает 0. Вводим цифру 7, вертим телефон как хотим, через 2 секунды, в любом случае кнопка становится активной, тыкаем на кнопку и счетчик растет. Стираем цифру, вертим телефоном снова — кнопка все равно через 2 секунды будет не кликабельна, а счетчик не сбросится.
Все, мы получили реализацию безболезненного поворота экрана без потери данных. При этом будут сохранены не только ObservableField и тому подобные, но так же и объекты, массивы и простые параметры, типа int.
Источник
Управляем ориентацией устройства в 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 распознал это как призыв поменять ориентацию дисплея. Для тех, кто любит читать лёжа, пользование гаджетом в таком положении становится целым испытанием, ведь практически всегда функция срабатывает не тогда, когда нужно.
Пользоваться планшетом или смартфоном лежа на боку, с включенной функцией поворота вообще не представляется возможным, из-за чего пользователи предпочитают полностью её отключать.
Как на Андроиде настроить поворот экрана?
Чтобы найти меню управления функцией, следуйте таким указаниям:
- Откройте меню устройства, зайдите в раздел «Настройки».
- Воспользуйтесь вкладкой «Специальные возможности».
- В списке вы найдёте строку «Автоповорот экрана» — чтобы включить её, поставьте галочку, для отключения же уберите её.
Есть ещё несколько способов настройки. К примеру, отдельная клавиша для активации или отключения есть в шторке, которая отодвигается сверху дисплея — речь идёт о быстром меню, где расположены кнопки Wi-Fi, Bluetooth и прочих модулей.
Специальная клавиша есть и в виджете энергосбережения — так вы сможете ещё быстрее активировать или запретить поворот экрана Android, не заходя в настройки.
Дополнительные возможности
Есть и отдельная программа для поворота экрана Андроид — Smart Rotator. Для чего она нужна? Приложение создано для более тонкой настройки этого инструмента. Суть заключается в том, что она сканирует систему и составляет список установленных сервисов. Далее, вы просто отмечаете все приложения, где требуется работа автоматического поворота, а в остальных случаях он будет отключён.
Получается, что это такая себе золотая середина между тем, чтобы функция не включалась, когда не нужно, но активировалась в отдельных приложениях, где без неё не обойтись.
Отметим только одно — не зря она есть в виджете энергосбережения, ведь использование автоповорота требует определённых затрат энергии, поэтому её и поместили в это меню. Если вы стремитесь растянуть время работы устройства Android, вам лучше не пользоваться этой функцией, и уж тем более вам не нужны специальные программы — они только увеличат потребление ресурсов аккумулятора.
Можно сделать вывод, что пользование автоматическим поворотом на Андроид — индивидуальный выбор каждого пользователя, ведь она удобна для многих, но некоторым приносит только дискомфорт. Как бы то ни было, теперь вы знаете больше об этой возможности дисплея, сможете быстро включить или отключить её несколькими способами.
Источник