поворот приложения android принудительный
5 лучших приложений для управления поворотом экрана на Android-устройстве
Функция смены ориентации экрана на Android не всегда работает так, как хочется пользователю — некоторые приложения не переворачиваются, а другие, напротив, переходят из портретного режима в ландшафтный и наоборот в самый неподходящий момент. К счастью, на Android есть приложения, которые позволяют настроить, в каких случая ориентация будет меняться, а в каких нет.
Это приложение добавляет в настройки ориентации несколько новых опций и позволяет перевернуть любое приложение, даже если оно изначально не поддерживает смену режима отображения. Кроме того, оно позволяет обходить стандартные настройки поворота экрана и запрещать приложениям менять интерфейс.
Rotation Manager позволяет выбрать, в какой ориентации экрана будет работать то или иное приложение: ландшафтной, портретной или по выбору системы (в том числе в зависимости от того, как вы держите устройство). Приложение постоянно работает в фоновом режиме, однако, по словам разработчиков, почти не потребляет оперативную память.
Orientation Manager более бережно относится к системным ресурсам — вы можете запретить этому приложению запускаться с загрузкой операционной системы. Когда оно запущено, на экране появляется миниатюрная кнопка, нажатие на которую позволяет форсированно изменить ориентацию любого запущенного приложения. Цвет кнопки можно выбрать в настройках.
С помощью Rotation Control можно запретить выбранным приложениям менять ориентацию интерфейса, активировать авто-поворот, при котором ориентация меняется в зависимости от того, как вы держите устройство, или зафиксировать определенную ориентацию: только портретная или только ландшафтная.
Screen Rotation Controller уведомляет вас, когда какое-либо приложение пытается сменить ориентацию экрана и позволяет разрешить или запретить ему сделать это. Кроме того, с его помощью вы можете форсированно поменять ориентацию любого приложения вручную.
Настраиваем автоповорот экрана в приложениях на Android
Все мы знаем, насколько раздражают неожиданные повороты на смартфоне, когда ты лежа читаешь статью как вдруг экран меняет книжную ориентацию на альбомную. Спешу вас обрадовать: на Android есть приложение, которое навсегда устранит это неудобство.
Rotation Manager от Meerkat — с ним вы забудете о назойливых и несвоевременных поворотах экрана, однако множество имеющихся в нём опций могут смутить неопытных пользователей. А поскольку я люблю, чтобы всё было просто и понятно, мой сегодняшний гайд поможет вам разобраться в этом приложении. Поехали!
Установка
Скачиваем Rotation Manager с Google Play Store. При первом запуске нас приветствует страничка с обучением и настройками. Свайпаем вперед и нажимаем на круглую иконку с текстом Auto-Rotate On, пока текст не изменится на Forced Portrait. Это сделает книжную ориентацию таковой по умолчанию, а также позволит настроить поворот экрана для других приложений. Сверху находится картинка, состоящая из трех скриншотов. Вам можно сделать так, чтобы было как на последнем.
Предоставляем разрешение
На последней странице у вас будет возможность отключить Permanent Notification (Постоянное уведомление). Если оставить её активной, вы будете видеть напоминание каждый раз, когда свайпаете сверху вниз, но зато приложение точно не будет закрыто системой энергосбережения ресурсов Android, работая в фоновом режиме. Решать вам, но я после отключения не столкнулся с какими-либо проблемами.
Далее, активируйте Rotation Manager, нажав на круглую иконку включения. Вас перенаправит на страницу настроек «Доступ к данным»: перейдите вниз, отыщите и нажмите Rotation Manager и активируйте Allow usage tracking (Разрешить отслеживание при использовании). Наконец, снова зайдите в приложение и нажмите галочку внизу страницы для сохранения настроек.
Индивидуальная настройка
Теперь поработаем с ориентацией для отдельных приложений. На главной странице Rotation Manager выберите нужную ориентацию, нажав на вертикальные (или горизонтальные) иконки сбоку от нужного приложения, тем самым закрепив за ним портретный или альбомный режим. Выбрав же обе иконки, вы активируете автоповорот.
Теперь всё настроено и готово к работе. Вам больше не нужно беспокоиться о том, что экран повернётся в самый неподходящий момент — вместо этого, за каждым приложением будет закреплена выбранная вами в Rotation Manager ориентация.
Как уже было сказано, существует множество других опций для настройки, которые можно подробно изучить в самом приложении, зайдя в меню Instructions.
Поворот приложения android принудительный
Наиболее понятный и настраиваемый менеджер ориентаций экранов устройств для Android. Позволяет снимать Full Control ориентации настроек устройства. Вращение по требованию позволяет выбрать поворот экрана на лету без необходимости переключения в приложение в первую очередь. Программа предлагает все режимы, которые поддерживает Android, и вы можете также переопределить каждый в настройках приложения, чтобы повернуть в соответствии с вашими потребностями. Приложение имеет встроенный учебник (в том числе на русском языке).
Языки:
— Английский, немецкий, французский, турецкий, китайский (упрощенный)
Поддерживаемые режимы:
Режимы системы по умолчанию
* Авто-поворот Вкл
* Автоповорот Off
Другие режимы переопределяют настройки системы
* Принудительный автоматический поворот
* Принудительный Портрет
* Принудительный Пейзаж
* Обратный Портрет
* Обратный Пейзаж
* Датчик Пейзаж
* Принудительный «Полный Датчик»
Блокировка:
— Блокировка текущей ориентации
Настройки приложения:
* Указана ориентация для отдельных приложений
* Указан Экран блокировки, Телефонный звонок, зарядки, гарнитуры и док ориентации
Уведомления:
* Включить для бесперебойной работы
* Выбор действия по нажатию
* Добавить быстрый переключатель изменения ориентации
Виджеты:
* Полностью настраиваемый с экрана блокировки поддержки (Android 4.2.2+)
* Сервис виджет: Переключить службы
* Режим виджет: Переключение между двумя выбранными режимами
* Динамическое виджет: Добавляет переключение в соответствии с вашими потребностями
Пользовательский интерфейс:
* Светлые и темные базовые темы
* Настройка цвета с помощью Rotation тематических акцентов. Поддержка тематических акцентов Xperia ™
* Выберите один из двух наборов значков по умолчанию и в перевернутом стиле
ВНИМАНИЕ:
— Нет рекламы
— Не требуется интернет разрешение
— Это приложение не требует прав суперпользователя.
— Некоторые приложения могут не отображаться правильно, когда вынуждены работать в режиме книжная / альбомная. Используйте Автоповорот On / Off в настройках приложения использовать системные настройки для этих приложений.
Повороты экрана в 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 принудительный
Наиболее понятный и настраиваемый менеджер ориентаций экранов устройств для Android. Позволяет снимать Full Control ориентации настроек устройства. Вращение по требованию позволяет выбрать поворот экрана на лету без необходимости переключения в приложение в первую очередь. Программа предлагает все режимы, которые поддерживает Android, и вы можете также переопределить каждый в настройках приложения, чтобы повернуть в соответствии с вашими потребностями. Приложение имеет встроенный учебник (в том числе на русском языке).
Языки:
— Английский, немецкий, французский, турецкий, китайский (упрощенный)
Поддерживаемые режимы:
Режимы системы по умолчанию
* Авто-поворот Вкл
* Автоповорот Off
Другие режимы переопределяют настройки системы
* Принудительный автоматический поворот
* Принудительный Портрет
* Принудительный Пейзаж
* Обратный Портрет
* Обратный Пейзаж
* Датчик Пейзаж
* Принудительный «Полный Датчик»
Блокировка:
— Блокировка текущей ориентации
Настройки приложения:
* Указана ориентация для отдельных приложений
* Указан Экран блокировки, Телефонный звонок, зарядки, гарнитуры и док ориентации
Уведомления:
* Включить для бесперебойной работы
* Выбор действия по нажатию
* Добавить быстрый переключатель изменения ориентации
Виджеты:
* Полностью настраиваемый с экрана блокировки поддержки (Android 4.2.2+)
* Сервис виджет: Переключить службы
* Режим виджет: Переключение между двумя выбранными режимами
* Динамическое виджет: Добавляет переключение в соответствии с вашими потребностями
Пользовательский интерфейс:
* Светлые и темные базовые темы
* Настройка цвета с помощью Rotation тематических акцентов. Поддержка тематических акцентов Xperia ™
* Выберите один из двух наборов значков по умолчанию и в перевернутом стиле
ВНИМАНИЕ:
— Нет рекламы
— Не требуется интернет разрешение
— Это приложение не требует прав суперпользователя.
— Некоторые приложения могут не отображаться правильно, когда вынуждены работать в режиме книжная / альбомная. Используйте Автоповорот On / Off в настройках приложения использовать системные настройки для этих приложений.