При повороте планшета картинка не растягивается
Масштаб интерфейса на устройстве Андроид – это размер всех элементов меню. Благодаря возможности его настроек, можно легко отрегулировать все под максимально удобный вид. Изменять масштаб можно, начиная с версии ОС Android 7.0 Nougat. Но на устройствах некоторых производителей, имеющих свою фирменную оболочку, функция уменьшения или увеличения масштаба присутствует уже давно. Они внедрили её еще на более ранних версиях Андроид.
Из статьи вы узнаете
Зачем менять масштаб?
В первую очередь, его можно изменять для того, чтобы на экран телефона помещалось больше информации. Это особенно полезно, если вы часто проводите время в мессенджерах, социальных сетях и так далее.
Также если пользователь постоянно не попадает в нужное место на экране, то для комфортной работы необходимо отрегулировать интерфейс чтобы кнопки управления были больше. Соответственно, по ним уже будет легче попасть.
В качестве примера посмотрите на эти два скриншота. На одном масштаб маленький, а на другом большой:
На что влияет масштаб?
Как видим из вышеприведенного скриншота, в первую очередь он влияет на количество информации на экране в один кадр. То есть, чем больше масштаб, тем больше помещается на экран полезной информации от приложений. Соответственно, становится удобнее пользоваться смартфоном из-за того, что не нужно всегда пролистывать экран для получения скрытой информации. С большим масштабом на экране больше текста, больше картинок, ведь сам интерфейс занимает меньше места.
На примере скриншота отлично видно, что с большим масштабом поместилось сразу четыре линии настроек, в то время как на маленьком масштабе всего две. Таким образом, мы увеличиваем количество информации на экране и делаем работу с гаджетом более удобной, быстрой и комфортной.
Также стоит отметить, что такие настройки задевают размеры только частиц интерфейса, при этом, не трогая размер шрифта, вставленных картинок, видео, фото и так далее.
При изменении размера интерфейса меняются только те параметры, что заданы как программа, а не как графический элемент. То есть если картинка будет одного размера, то она не станет меньше либо больше с изменением масштаба, так как картинка не относится к интерфейсу, она уже считается как контент. Следственно, размер интерфейса никак не повлияет на отображение в играх, при просмотре фильмов в плеере, в галерее и так далее. Данный метод делает размер интерфейса только для полигонов системы, которые создаются в виде кода, а не графики.
Масштаб будет применен к следующим частям системы:
- Меню системных настроек;
- Приложения, не имеющие особого дизайна (некоторые мессенджеры, настройщики и так далее);
- Статус бар и шторка уведомлений;
- Приложение для звонков и СМС;
- Календарь, почта, переводчик и прочие сервисы от Google и других компаний;
- Play Market (или Google Play);
- Экран разблокировки;
- Размер диалоговых окон и иконок в лаунчере.
А вот эти элементы не будут изменяться:
- Отдаленность заставки;
- Отдаленность фоновых изображений и живых обоев;
- Странички в браузере и прочие веб-элементы;
- Игры;
- Видео и музыкальные плееры;
- Картинки в галереях;
- Интерфейс входящего и исходящего вызовов;
- Шрифт, то есть любой текст;
- Клавиатура;
- И так далее…
Первый способ
- Для начала нам нужно зайти в настройки смартфона. Для этого нажмите на шестерёнку в шторке уведомлений либо запустите ярлык настроек через лаунчер.
- Далее в настройках откройте пункт «Экран».
В данном случае доступно лишь 4 режима:
- очень крупный;
- средний;
- маленький;
- очень маленький.
Увы, в этом методе нельзя более широко настроить масштаб интерфейса, все ограничивается лишь четырьмя пучками. Зато все очень быстро и удобно. Также при изменении масштаба есть картинка, показывающая, как будет выглядеть интерфейс в разных приложениях.
Второй способ
Более сложный, но и более гибкий. Во втором способе можно изменять размер насколько угодно, хоть до мельчайшего интерфейса, который не будет видно, хоть до очень большого, где одна кнопка будет на весь экран. Конечно, так сильно выкручивать интерфейс не стоит, но сам факт такой возможности говорит нам о полной свободе выбора через второй способ.
Для применения нужно зайти в режим «Для разработчиков». Делаем следующие шаги:
- Откройте настройки смартфона. Сделать это можно через шторку уведомлений, нажав на шестеренку вверху, либо открыв настройки через ярлык в лаунчере смартфона.
- В настройках листаем в самый низ и открываем пункт «Система» или «О телефоне» в зависимости от версии Андроида.
Мобильные устройства давно уже стали заменой компьютера: наличие смартфона или планшета позволяет общаться в мессенджерах, просматривать видео, серфить в интернете. Для удобства пользователей производители постоянно повышают качество дисплеев, увеличивают размеры экранов, расширяют функционал. Одной из базовых функций на абсолютно любом устройстве является автоматическая смена ориентации.
Благодаря ей появляется возможность отображать контент в удобном формате, упрощается набор текста, просмотр фильмов, видеороликов и выполнение многих других процессов. Одни не представляют себе работы без этой функции, других она, наоборот, раздражает. Но время от времени возникают ситуации, когда телефон самопроизвольно отказывается переключаться с одного режима на другой. Как бы то ни было, следует разобраться, почему на Андроиде не работает автоповорот экрана, и какие способы существуют для устранения этой проблемы.
Автоповорот на Андроиде: обзор опции
По умолчанию изображение на телефоне имеет книжную ориентацию. При повороте аппарата из вертикального положения в горизонтальное оно адаптируется под направление гаджета. Управляет такими действиями специальный датчик – акселерометр, который отслеживает положение устройства в пространстве.
Как любая функция, автоповорот экрана на Андроиде имеет определенные достоинства и недостатки.
2. Проще набирать тексты – увеличиваются размеры клавиш, к тому же телефон можно разместить на столе.
Почему не работает автоповорот на Андроиде
Причин, по которым автоповорот на Android-устройстве перестает функционировать, может быть несколько, начиная от программных ошибок и заканчивая неисправностями в самом аппарате. Не стоит отчаиваться и спешить в магазин за новым гаджетом. Поломка не относится к разряду критических, и решить проблему в большинстве случаев удается самостоятельно.
Опция отключена
Если при повороте устройства ориентация экрана не меняется, следует убедиться, что фиксация его положения отключена. Сделать это можно через стандартные настройки смартфона:
Отключить фиксацию дисплея можно также через шторку уведомлений Android. Чтобы получить к ней доступ, нужно провести пальцем по экрану сверху вниз. Когда откроется панель быстрого доступа к основным инструментам, отыскать кнопку «Автоповорот» с изображением замка. Одним касанием иконки можно быстро деактивировать блокировку ориентации экрана, не углубляясь в настройки.
Проблемы с калибровкой
Если при смене положения смартфона экран не меняет своей ориентации, это может быть вызвано сбоем в работе оборудования, отвечающего за автоповорот. Определить, что вышел из строя именно гироскопический датчик, можно по следующим признакам:
Устранить неисправность поможет калибровка акселерометра. Сделать это можно двумя способами: через инженерное меню либо с помощью специальных утилит.
Сбой в работе операционной системы
За автоматический поворот экрана отвечает гироскопический датчик, который непрерывно отслеживает текущее положение мобильного устройства. Нарушение его нормальной работы может быть вызвано несколькими причинами.
- Сбой в системе Android, обусловленный внутренними проблемами с распознаванием сигналов. Устранить его поможет банальная перезагрузка смартфона. Для этого нужно нажать на клавишу питания, в появившемся меню выбрать вариант «Перезагрузка» и подтвердить действие. Если аппарат оснащен съемной батареей, после отключения гаджета ее понадобится извлечь на 2-5 минут, после чего вернуть на прежнее место и включить гаджет;
- На работу акселерометра могут негативно повлиять программы, работающие в фоновом режиме. Чтобы исключить их причастность к данному сбою, понадобится приостановить или удалить недавно установленные приложения. Для этого нужно обратиться к настройкам, перейти в раздел «Приложения», и выбирая по одной программы, переходить на их страницы. Здесь нажать последовательно «Очистить кэш» → «Очистить данные»→ «Удалить». Для временного прекращения фоновых процессов на странице приложения нужно тапнуть по кнопке «Отключить».
- Еще одной причиной выхода из строя акселерометра может стать очередное обновление Android. В данной ситуации можно попробовать откатить устройство к прежней версии или дождаться выхода следующей официальной версии прошивки.
- Устранить проблему с неработающим гиродатчиком поможет возврат к заводским установкам. Метод считается радикальным, поэтому использовать его рекомендуется в самом крайнем случае. Реализовать его можно штатными средствами, предварительно создав резервную копию пользовательских данных. Понадобится войти в «Настройки» → «Общие настройки» → «Восстановление и сброс». Прокрутив страницу до самого низа найти пункт «Сброс настроек» и нажать. Когда появится предупреждение системы, подтвердить свое намерение, выбрав вариант «Стереть все».
Проблемы с прошивкой Android
Иногда сбой в работе акселерометра может возникнуть из-за установленной на смартфоне кастомной прошивки. Чтобы устранить проблему, необходимо вернуться к официальной версии операционной системы либо заново перепрошить Android. Уникального алгоритма выполнения данной операции не существует, поэтому целесообразно подробно изучить информацию на форумах, посвященную конкретной модели устройства. Если обновление ПО выполняется через компьютер, понадобится найти в интернете файл с прошивкой и загрузить его на ПК. Если для этого используется стороннее программное обеспечение, на смартфон потребуется скачать программу «CWM Recovery».
Отсутствует акселерометр в телефоне
Несмотря на популярность и востребованность мобильных устройств, до сих пор можно встретить аппараты, в которых нет акселерометра. Как правило, к ним относятся «ультрабюджетные» девайсы от малоизвестных брендов из Поднебесной. Если проблема с поворотом дисплея возникла сразу после покупки, следует выяснить, а был ли гиродатчик изначально?
Для проверки наличия акселерометра понадобится воспользоваться приложением для диагностики «железа» на Android-устройстве, например, «Sensor Kinetics». Оно отображает информацию о работе датчиков и, если установка акселерометра не предусмотрена на данном девайсе, выдаст предупреждение «Отсутствует на данном устройстве». В этом случае заставить экран поворачиваться получится только с помощью сторонних программ.
Сломался G-сенсор
Программы для автоповорота на Андроиде
Если поломка гиродатчика на смартфоне не считается критичной, но потребность в использовании функции поворота экрана все-таки может возникнуть, следует обратить внимание на дополнительный софт, который позволит настраивать экран своего девайса в ручном режиме. Необходимость в применении сторонних утилит может возникнуть и в тех случаях, когда игры и приложения, установленные на смартфоне, не поддерживают автоповорот экрана. Наиболее популярными программами такого класса считаются следующие.
Rotation – Orientation Manager
Менеджер автоповорота экрана предназначен для принудительного поворота нужных приложений или игр с возможностью включения и отключения в портретном или ландшафтном режиме. Основными достоинствами являются:
- интуитивно понятный интерфейс;
- простота в управлении;
- небольшой размер программы;
- наличие русскоязычной версии;
- отсутствие оплаты;
- автозапуск при включении устройства;
- возможность обхода стандартных настроек;
- запрет приложениям менять интерфейс;
- подсказки по работе с утилитой;
- поддержка различных тем оформления.
Программа пользуется популярностью, поскольку практически не имеет недостатков кроме одного – небольшая задержка при повороте игры или приложения сразу после запуска. Она работает постоянно, в фоновом режиме, но при этом почти не потребляет оперативную память.
Rotation Control
Программа позволяет менять ориентацию в приложениях, где данная возможность не предусмотрена разработчиком, а также фиксировать определенное положение (книжное или ландшафтное).
Основными достоинствами утилиты считаются:
- простой привлекательный дизайн;
- понятный и легкий в использовании интерфейс;
- легкое управление ориентацией экрана с помощью панели управления;
- возможность настраивать режимы поворота для каждого приложения;
- идентификация подключения зарядного устройства или наушников;
- возможность поворачивать экран вправо, влево, на 180°;
- отсутствие рекламного контента в платной версии программы.
Недостатком можно назвать: короткий бесплатный период использования – 7 дней.
Screen Rotation Controller
Отличная в своем сегменте и удобная в управлении программа, предоставляющая более детальный подход к настройке ориентации экрана. Она позволяет блокировать экран в определенном положении, чтобы избежать нежелательных поворотов при просмотре фильмов, видео, а также адаптировать дисплей под нестандартные приложения и запущенные игры.
«Screen Rotation Controller» уведомляет, когда какое-либо приложение пытается сменить ориентацию, а также самостоятельно принимает решение разрешать или запрещать ему выполнить это действие. Программа запускается автоматически при включении или перезагрузке смартфона, работает постоянно в фоновом режиме, но при этом практически не расходует оперативную память.
Как включить автоповорот на Андроиде
Большинство владельцев Android-устройств стараются использовать дисплей в вертикальном положении, однако при просмотре фильмов, видеороликов предпочитают менять ориентацию на горизонтальную. Активировать автоматическое вращение можно через настройки смартфона или с помощью оперативной панели быстрого доступа к инструментам управления. Скорость работы функции будет зависеть от показателей точности установленного акселерометра.
Через меню
- открыть «Настройки»;
- перейти в раздел «Экран» или «Дисплей»;
- найти пункт «Автоповорот экрана» и активировать функцию, передвинув ползунок вправо.
Через панель управления
Неполадки в работе функции автоповорота могут периодически возникать на каждом смартфоне. Чаще всего причина кроется в программных ошибках Android, хотя в редких случаях они появляются из-за неисправностей в самом аппарате. Если в первом случае устранить проблему удается самостоятельно, во втором – требуется помощь специалиста. Однако теперь вы будете знать, почему не работает автоповорот экрана на 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.
Когда не работает поворот экрана на планшете с Андроид, то некоторыми функциями или программами в устройстве невозможно пользоваться. Но прежде чем бежать к мастеру или в сервисный центр, лучше попробовать проверить или диагностировать неполадки самому. Сразу предупреждаем, что мы не будем разбирать и собирать девайс. Поэтому о потере гарантии можете не беспокоиться. Однако перед выполнением каких-либо действий давайте узнаем подробнее о функции поворота экрана и принципе его работы.
Чтобы включить или выключить поворот дисплея на планшете, нужно вызвать панель задач верхним свайпом
Итак, за правильный автоматический поворот экрана на планшете отвечает специальный датчик, встроенный в устройство. Он определяет положение гаджета в пространстве и соответственно этому изменяет положение изображения на мониторе. Например, когда вы поворачиваете планшет боком, картинка на экране переворачивается вместе с ним, чтобы вы могли видеть всё то, что происходит. Например, это очень удобно при просмотре фильма: можно смотреть его во весь экран устройства. Понятно, что проблемы с выходом из строя такой функции могут доставить много неприятностей.
Как настроить и включить автоповорот?
- Для начала нужно проверить: включено ли это у вас на планшете. Может быть, что функция находится в выключенном состоянии, а вы думаете о поломке или неисправности планшета.
- Зайдите в настройки через основное меню или с помощью шторки панели уведомлений и в то же время управления.
- Теперь перейдите во вкладку с параметрами экрана.
- Найдите пункт «Автоповорот экрана» и установите там галочку. Или же передвиньте ползунок в активное положение.
- Проверьте работу поворота изображения в какой-нибудь программе.
- Обратите внимание, что местоположение настроек или некоторых пунктов из этой инструкции может разниться. Это зависит от того, какая версия операционной системы Андроид установлена на вашем гаджете. Однако принцип включения автоповорота экрана остаётся одним и тем же, поэтому можно найти необходимые параметры самому.
- Настраивать поворот отдельно каким-то способом не нужно: его можно либо включить, либо выключить.
- При наличии дополнительных проблем перейдите к следующему блоку.
- Обратите внимание, что регулировать работу автоповорота можно при помощи одноимённой кнопки в панели уведомлений (или управления). Для её вызова проведите пальцем сверху вниз по экрану.
Исправляем неполадки
Итак, если у вас всё равно не работает автоповорот экрана, то давайте попробуем следующие способы. Если вы по каким-то причинам пропустили предыдущий блок, то обязательно вернитесь к нему и убедитесь, что автоповорот включен. Только после этого можно делать следующие операции. Приступим:
Замена по гарантии
Если вы приобрели устройство менее года назад, возможно, стоит отнести его в сервисный центр
Подведём итоги
Читайте также: