Android studio запрет ориентация экрана

Содержание
  1. Управление ориентацией экрана в android приложениях
  2. Как поменять ориентацию экрана вручную
  3. Блокировка ориентации экрана
  4. Пример android приложения
  5. Реализация автоматической ориентации экрана
  6. Реализация динамической смены шаблона при переориентации экрана
  7. Реализация блокировки автоматической ориентации экрана
  8. Как отключить изменение ориентации на Android?
  9. 12 ответов:
  10. Советы
  11. Cleartext HTTP traffic not permitted (https)
  12. Запретить делать скриншот экрана приложения
  13. Аналог html-кода
  14. Где находятся исходники системного калькулятора?
  15. Имитация тяжёлых задач
  16. Доступ к ресурсам через URI
  17. Ошибка Debug Certificate expired
  18. Убрать предупреждающие значки при использовании строк в атрибутах
  19. Проверка на первый запуск приложения
  20. Ошибка при загрузке apk-файла на эмулятор/устройство
  21. Сделать скриншот экрана своего приложения
  22. Раскодирование HTML-символов
  23. Кодирование строк по схеме UTF-8
  24. Кодирование в режиме Base64
  25. Пишем собственную функцию md5() для вычисления хэша строки
  26. Как заблокировать экран в приложении?
  27. Узнать размеры экрана
  28. В чем разница между fill_parent и match_parent
  29. Как убрать заголовок у Activity?
  30. Как использовать собственный значок для программы
  31. Получить номер версии программы
  32. Убить приложение
  33. Сколько используется памяти
  34. Разрешённый объём памяти для приложения
  35. Запретить автоматическую смену ориентации при повороте устройства

Управление ориентацией экрана в 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 файл.

Читайте также:  Using services in android

Реализация динамической смены шаблона при переориентации экрана

Давайте теперь создадим 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?

У меня есть приложение, которое я хотел бы использовать в портретном режиме, так я определил android: screenOrientation= «портрет» в XML-манифесте. Это работает нормально для HTC Magic телефон (и предотвращает изменения ориентации на других телефонах, а также).

но у меня проблема с HTC G1 телефон, как я открываю оборудование QWERTY-клавиатура (не виртуальной клавиатуры). Моя активность остается в портретном режиме, но, похоже, она перезапускается и теряет все свои состояния. Это не происходит с HTC Hero версия.

мое приложение довольно большое, поэтому я не хочу, чтобы оно перезапускалось и теряло все свои состояния при открытии клавиатуры. Как я могу это предотвратить?

12 ответов:

обновление апрель 2013: Не делайте этого. Это была не очень хорошая идея в 2009 году, когда я впервые ответил на вопрос, и это действительно не очень хорошая идея сейчас. См. этот ответ hackbod по причинам:

добавить android:configChanges=»keyboardHidden|orientation» к вашему AndroidManifest.XML. Это говорит системе, какие изменения конфигурации вы собираетесь обрабатывать самостоятельно — в этом случае, выполнив ничего.

см. справочник разработчика configChanges для более подробной информации.

тем не менее, ваше приложение может быть прервано в любое время, например, по телефону, так что вы действительно должны добавить код, чтобы сохранить состояние вашего приложения, когда он приостановлен.

обновление: начиная с Android 3.2, вам также нужно добавить «screenSize»:

внимание: начиная с Android 3.2 (уровень API 13), «Размер экрана » также изменяется при переключении устройства между книжной и альбомной ориентацией ориентация. Таким образом, если вы хотите предотвратить перезапуск среды выполнения из-за изменение ориентации при разработке для API уровня 13 или выше (как объявленные атрибутами minSdkVersion и targetSdkVersion), вы необходимо включить значение» screenSize «в дополнение к» ориентация» значение. То есть, вы должны заявлять android:configChanges=»orientation|screenSize» . Однако, если ваш приложение нацелено на уровень API 12 или ниже, тогда ваша активность всегда обрабатывает это изменение конфигурации сам (это изменение конфигурации не перезапускает вашу деятельность, даже при работе на Android 3.2 или высшее устройство).

Источник

Советы

Cleartext HTTP traffic not permitted (https)

При работе с Android 8+ примеры, которые обращаются к веб-адресам по протоколу http вызывают ошибку. Чтобы обойти данное ограничение, можно сделать следующее.

В папке res/xml размещаем файл network_security_config.xml:

В манифесте в блоке application добавляем новый атрибут.

Запретить делать скриншот экрана приложения

Существует специальный флаг FLAG_SECURE, запрещающий пользователю сделать скриншот вашего экрана. Это нужно в целях безопасности для отдельных видов приложений, например, банковских.

Читайте также:  Android install error codes

Аналог html-кода

При многострочных текстах вы можете воспрепятствовать переносу слов на разные строки, если их желательно держать вместе. В html есть специальный символ неразрывного пробела . В строковых ресурсах вы можете использовать символ или юникод-код \u00A0.

Где находятся исходники системного калькулятора?

Имитация тяжёлых задач

В Android нельзя выполнять сложные задачи в основном потоке. Для создания быстрой заглушки, которая будет имитировать тяжёлую задачу, можно написать следующий код:

Например, поместите код в обработчик нажатия кнопки и после нажатия нажмите на кнопку Back. Программа зависнет и вы увидите сообщение об этом.

Доступ к ресурсам через URI

Обычно мы обращаемся к ресурсам через идентификатор. Существует альтернативный способ через Uri. Например, такой подход может пригодиться для загрузки изображения в WebView при помощи метода loadUrl(). Формат доступа будет следующим: android.resource://[package-name]/res-id. Например:

Ошибка Debug Certificate expired

По умолчанию вашей программе выдается отладочный сертификат на один год. Если у вас есть старый проект, то можете получить сообщение об ошибке: Error generating final archive: Debug Certificate expired.

Вам следует удалить старый сертификат, и Eclipse создаст новый ещё на один год. Путь к сертификату можно посмотреть в настройках: Preferences | Android | Build | Default debug keystore. Обычно это папка C:\Users\ИмяПользователя\.android.

Убрать предупреждающие значки при использовании строк в атрибутах

Если в некоторых атрибутах компонентов использовать строки, то появляются предупреждающие значки с всплывающей надписью [I18N] Hardcoded string «Котики рулят», should use @string resource. Надпись призывает использовать строковые ресурсы, а не писать текст прямо в атрибутах. На самом деле это всего лишь предупреждение, а не ошибка. Программа будет прекрасно запускаться, но новичков такие надписи пугают. Можете убрать данное предупреждение, если добавите дополнительный атрибут tools:ignore.

Проверка на первый запуск приложения

Для проверки первого запуска приложения можно использовать настройки SharedPreferences. Смотрите пример.

Ошибка при загрузке apk-файла на эмулятор/устройство

Если при загрузке apk-файла вашего приложения на эмулятор или устройство вы получаете сообщение об ошибке:

Failed to upload xxxxxxxx.apk on device ’emulator-5554′
java.io.IOException: Unable to upload file: timeout

То зайдите в Eclipse в меню Window | Preferences | Android | DDMS и в текстовом поле ADB connection time-out (ms) вместо значения по умолчанию 5000 введите большее значение.

Сделать скриншот экрана своего приложения

Один из примеров снятия скриншота своего экрана — через методы рисования получить графический отпечаток корневой разметки, а затем сохранить его как картинку, которую можно вывести в ImageView. Выберите любой ваш экран для опытов и добавьте на неё кнопку для снятия скриншотов и ImageView для вывода сохранённого изображения. В моём случае корневым элементом была компоновка TableLayout.

Результат до и после снятия скриншота. Сам скриншот помещается в ImageView, поэтому растягивается до его размеров. Попробуйте доработать пример.

Изменённый пример, когда скриншот сохраняется на SD-карту:

Не забываем про разрешения.

Раскодирование HTML-символов

Если вам нужно раскодировать HTML-символы (угловые скобки <>, знак амперсанда &, кавычки «»), то воспользуйтесь методом TextUtils.htmlEncode(). Добавим на форму две текстовые метки. И небольшой код для примера:

Примечание: Если вы пользуетесь Notepad++, то там есть такая же возможность: TextFX | TextFX Convert | Encode HTML.

Кодирование строк по схеме UTF-8

Вероятно, вы не раз замечали, что в адресной строке некоторые символы заменяются на последовательность других символов. Самый простой пример — символ пробела заменяется на %20. Немного изменим предыдущий пример:

Читайте также:  Family island для андроид

В нашем примере были преобразованы символы пробела и русские символы.

Кодирование в режиме Base64

Пишем собственную функцию md5() для вычисления хэша строки

У PHP-программистов есть готовая функция md5(), которая вычисляет MD5 хэш строки с использованием алгоритма MD5 RSA Data Security и возвращает этот хэш. Хэш представляет собой 32-значное шестнадцатеричное число. Напишем собственную функцию на Java:

Осталось применить её где-нибудь:

Как заблокировать экран в приложении?

Также нужно установить разрешение android.permission.DISABLE_KEYGUARD.

Если стоит обратная задача — запретить блокировку экрана при долгом бездействии, то используйте метод setKeepScreenOn() или используйте XML-атрибут android:keepScreenOn=»true».

Узнать размеры экрана

Для вычисления размеров экрана можно воспользоваться двумя способами. Второй способ более правильный.

В чем разница между fill_parent и match_parent

match_parent = fill_parent. Первое свойство нужно использовать в новых проектах, второе свойство считается устаревшим и пока оставлено в целях совместимости.

Как убрать заголовок у Activity?

В некоторых случаях хочется спрятать заголовок (Title) у программы. Есть несколько способов. Например, применить специальную тему (прописать в манифесте файла):

Также попробуйте android:theme=»@android:style/Theme.Black.NoTitleBar.Fullscreen» (убирает не только заголовок, но и панель уведомлений). Названия тем могут быть и другими, смотрите документацию. Несколько примеров

Если у вас используется своя тема, то используйте в ней параметр:

Также существует программный способ (перед вызовом setContentView):

Как использовать собственный значок для программы

Когда вы создаете учебные примеры, то у всех программ используется стандартный значок с изображением андроида. Как же использовать свой значок? Ответ прост. В папке проекта /res вы можете видеть подпапки drawable-ldpi, drawable-mdpi, drawable-hdpi и др., в которых и содержатся готовые значки в формате PNG под разные размеры экранов.

Вы можете просто открыть png-файл в графическом редакторе и нарисовать что-то свое и сохранить изменения.

Вы можете сохранить значки под своим именем, например, cat.png. В этом случае вам надо открыть файл манифеста, найти там строчку:

И отредактировать её, например, android:icon=»@drawable/cat» (без расширения). Как вариант, вы можете сохранить один значок в папке drawable в нужном размере, если пишете программу под определенные типы телефонов.

Размеры значков в папках (часть):

  • Low density – ldpi = 36×36 px
  • Medium density – mdpi = 48×48 px
  • High density – hdpi = 72×72 px
  • Extra-high density screen — xhdpi (320 dpi) = 96 × 96 px

Получить номер версии программы

Убить приложение

Сколько используется памяти

Нужно от общей памяти отнять свободную память

Более общий пример:

Разрешённый объём памяти для приложения

Система выделяет каждому приложению определённый лимит памяти. На разных устройствах размер выделяемой памяти отличается. Чтобы узнать размер выделяемой памяти для вашего приложения, используйте код:

Особенно это касается приложений, которые активно используют графику. Следите за размерами изображений, вызывайте метод recycle() для освобождения памяти при работе с классом BitmapFactory.

Начиная с Android 3.0 можно попросить у системы выделять чуть больше памяти, прописав в манифесте просьбу:

Запретить автоматическую смену ориентации при повороте устройства

Если вы хотите запретить автоматическую смену ориентацию при повороте устройства, то можно ее отключить для нужного экрана. Например, если экран с настройками должен отображаться только в портретном режиме, то добавьте одну строчку с атрибутом screenOrientation в манифест файла для соответствующей активности

Источник

Оцените статью