Android screen supports screens

Экран

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

Настройки — Экран

Чтобы показать окно Экран из системного приложения Настройки:

Размеры экрана и его ориентация (Старый и новый способ)

Чтобы узнать размеры экрана и его ориентацию из запущенного приложения, можно воспользоваться встроенными классами Android.

Данный способ был опубликован в те времена, когда у меня был Android 2.3. Читатели подсказали, что теперь методы считаются устаревшими (API 13 и выше). Пришлось переписывать код. Впрочем, спустя некоторое время и этот код стал считаться устаревшим.

Ориентацию при помощи нового метода не узнаешь. Помните, что это размеры экрана устройства, а не экрана вашего приложения. Кроме того, в документации как-то туманно описывается точность вычислений этих размеров. Никому верить нельзя.

Плотность экрана, масштабирование шрифта и др.

Существует класс DisplayMetrics, также имеющий в своём составе свойства для экрана. Пример также пришлось переписывать после выхода Android 11 (API 30), который теперь тоже устаревший:

Вот ещё несколько способов определения размеров:

Такой же код, но с использованием дополнительной константы SCREENLAYOUT_SIZE_MASK:

На Kotlin в виде отдельной функции.

Заглянув в документацию, обнаружил, что можно обойтись без собственных констант. Они уже есть в Android. Оформил в виде отдельного метода.

Получить текущее значение яркости экрана

В настройках экрана можно установить желаемую яркость экрана при помощи ползунка, но при этом мы не знаем, сколько это в попугаях. Я открою вам секрет при помощи простого кода:

Установить яркость экрана

Если можно получить значение текущей яркости экрана, значит можно и установить яркость. Для начала нужно установить разрешение на изменение настроек в манифесте:

Для настройки яркости нужно использовать параметр System.SCREEN_BRIGHTNESS. Добавим на форму кнопку, метку и ползунок. Код для установки яркости:

Проверил старый пример времён Android 2.2 на эмуляторе с Android 10. Правила ужесточились. Теперь разрешение на изменение системных настроек выдаются только системным программам. Пока ещё есть лазейка, которой и воспользуемся. Новый пример написан на Kotlin. Добавим в манифест немного модифицированное разрешение.

Далее программа должна проверить возможность изменять системные настройки через метод canWrite(). Если такая возможность есть, то запрашиваем разрешение. Появится специальное окно, в котором пользователь должен подтвердить своё решение через переключатель. После этого нужно заново запустить программу, чтобы ползунок стал доступен. Теперь можете менять настройки.

Настраиваем яркость экрана в своём приложении

Существует возможность переопределить яркость экрана в пределах своего приложения. Я не смог придумать, где можно найти практическое применение, но вдруг вам пригодится. Для управления яркостью экрана воспользуемся элементом SeekBar.

За яркость экрана отвечает свойство LayoutParams.screenBrightness:

Интересно, что когда выводил ползунок в значение 0, то эмулятор зависал с экраном блокировки. Вам следует учесть эту ситуацию и добавить условие:

Опять столкнулся с проблемой. Пример работал на старых устройствах, а на некоторых устройства не работает. Но за эти годы мне ни разу не пришлось использовать этот способ, поэтому даже не стал искать причину. И кстати, ошибка со значением 0 уже не возникает (возможно из-за того, что сам пример не работает как раньше).

Определение поддерживаемых экранных размеров в манифесте

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

В данном примере приводится поддержка нормальных и больших экранов. Маленьким экраном можно назвать любой дисплей с разрешением меньше, чем HVGA. Под большим экраном подразумевается такой, который значительно больше, чем у смартфона (например, у планшетов). Экран нормальных размеров имеет большинство смартфонов.

Атрибут anyDensity говорит о том, каким образом ваше приложение будет масштабироваться при отображении на устройствах с разной плотностью пикселов. Если вы учитываете это свойство экрана в своем интерфейсе, установите этому атрибуту значение true. При значении false Android будет использовать режим совместимости, пытаясь корректно масштабировать пользовательский интерфейс приложения. Как правило, это снижает качество изображения и приводит к артефактам при масштабировании. Для приложений, собранных с помощью SDK с API level 4 и выше, этот атрибут по умолчанию имеет значение true.

Размеры картинок для фона экрана

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

Читайте также:  Command and conquer generals zero hour для андроид

res/drawable-ldpi — 240×320
res/drawable-mdpi — 320×480
res/drawable-hdpi — 480×800
res/drawable-xhdpi — 640×960
res/drawable-xxhdpi — 960×1440
res/drawable-tvdpi — 1.33 * mdpi

Источник

Android screen supports screens

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

Приложение “поддерживает” размер экрана, если оно правильно заполняет весь экран. Для большинства приложений размер отлично подстраивается автоматически. Тем не менее, часто необходимо оптимизировать интерфейс приложения для различных размеров экрана, путем создания альтернативных ресурсов разметки. Например, вы можете использовать разную разметку явлений для телефонов и планшетов.

Однако, если ваше приложение плохо работает с разными размерами экранов, вы можете использовать элемент .

Примечание: Android 3.2 включает новые атрибуты android:requiresSmallestWidthDp , android:compatibleWidthLimitDp и android:largestWidthLimitDp . Если вы разрабатываете приложение для Android 3.2 и выше, используйте данные атрибуты для объявления поддерживаемых размеров экрана, вместо атрибутов, основанных на обобщенных размерах.

Указывает, должно ли приложение изменять размер на разных экранах. Значение по умолчанию true . Если установлено значение false , система будет запускать приложение в режиме совместимости на больших экранах.

Атрибут устарел, не используйте его.

Указывает, поддерживает ли приложение маленькие экраны. Маленьким считается экран с меньшим соотношением, чем “нормальный” (стандартный HVGA). Значение по умолчанию true .

Указывает, поддерживает ли приложение нормальные экраны. Традиционно это HGVA экраны со средней плотностью, но “нормальными” также считаются экраны WQVGA с низкой плотностью и WVGA с высокой плотностью. Значение по умолчанию true .

Указывает, поддерживает ли приложение большие экраны. Большим считается экран, который значительно больше, чем “нормальный” экран телефона. Значение по умолчанию не постоянно от версии к версии, поэтому лучше явно указывайте значение данного атрибута. Помните, что false , как правило, включает режим совместимости.

Атрибуте добавлен в API 9.

Указывает, содержит ли приложение ресурсы для любой плотности экрана.

Для Android 1.6 (API 4) и выше, значение по умолчанию равно true и вы не должны указывать false , если абсолютно не уверены, что это требуется для работы приложения. Единственная причина, когда это может быть необходимо, это если ваше приложение напрямую управляет растровыми изображениями. (Смотрите раздел Поддержка различных экранов.)

Указывает минимально требуемую ширину smallestWidth. smallestWidth является самой краткой размерностью пространства экрана (в dp), которая должна быть доступна для интерфейса приложения, то есть кратчайшее из двух измерений экрана. Таким образом, для того, чтобы устройство считалось совместимым с приложением, smallestWidth устройства должно быть больше или равно, чем указанное в атрибуте значение. (Обычно указывается значение, которое поддерживает макет независимо от ориентации экрана).

Например, типичный размер экрана телефона имеет smallestWidth равный 320dp, 7 дюймовый планшет – 600dp, 10 дюймовый – 720dp. Эти значения, как правило являются кратчайшими размерами свободного пространства экрана.

Размер, с которым сравнивается ваше значение учитывает также системные элементы на экране. Например, если устройство имеет постоянные элементы интерфейса, система объявляет smallestWidth меньше, чем фактический размер экрана. Таким образом, используемое значение должно быть равно минимальной ширине, которая необходима для макета, независимо от ориентации экрана.

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

Внимание: система Android не обращает внимание на этот атрибута, так что он не влияет на поведение приложения во время выполнения. Он используется сервисами, вроде Google Play для фильтрации. Тем не менее, Google Play в настоящее время не поддерживает этот атрибут (Android 3.2), так что вы должны продолжать использовать атрибуты других размеров, если ваше приложение не поддерживает маленькие экраны.

Атрибута добавлен в API 13.

Атрибут позволяет разрешить режим совместимости, указав максимальную “наименьшую ширину экрана”, для которой создано приложение. Если наименьшая сторона доступного пространства экрана больше, чем значение атрибута, пользователи смогут установить приложение, но должны будут включить режим совместимости. По умолчанию, режим совместимости запрещен и разметка обычно подстраивается под размер экрана, но доступна кнопка в системной панели, позволяющая включать и выключать режим совместимости.

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

Примечание: в настоящее время режим совместимости эмулирует только мобильные телефоны с шириной 320dp, так что режим совместимости не применяется, если значение атрибута больше 320.

Атрибут добавлен в API 13.

Атрибут позволяет разрешить режим совместимости, указав максимальную “наименьшую ширину экрана”, для которой создано приложение. Если наименьшая сторона доступного пространства экрана больше, чем значение атрибута, приложение запускается в режиме совместимости, без возможности отключить его./p>

Если приложение совместимо со всеми размерами экрана и разметка правильно подстраивается, нет необходимости использовать данный атрибут. В противном случае, вы должны сначала подумать об использовании атрибута android:compatibleWidthLimitDp . Вы должны использовать атрибут android:largestWidthLimitDp только когда функциональность приложения нарушается на больших экранах и режим совместимости это единственный способ работы, который должны применять пользователи вашего приложения.

Читайте также:  Как загрузить андроид пакет

Примечание: в настоящее время режим совместимости эмулирует только мобильные телефоны с шириной 320dp, так что режим совместимости не применяется, если значение атрибута больше 320.

Источник

Android screen supports screens

An application «supports» a given screen size if it resizes properly to fill the entire screen. Normal resizing applied by the system works well for most applications and you don’t have to do any extra work to make your application work on screens larger than a handset device. However, it’s often important that you optimize your application’s UI for different screen sizes by providing alternative layout resources. For instance, you might want to modify the layout of an activity when it is on a tablet compared to when running on a handset device.

However, if your application does not work well when resized to fit different screen sizes, you can use the attributes of the element to control whether your application should be distributed to smaller screens or have its UI scaled up («zoomed») to fit larger screens using the system’s screen compatibility mode. When you have not designed for larger screen sizes and the normal resizing does not achieve the appropriate results, screen compatibility mode will scale your UI by emulating a normal size screen and medium density, then zooming in so that it fills the entire screen. Beware that this causes pixelation and blurring of your UI, so it’s better if you optimize your UI for large screens.

Note: Android 3.2 introduces new attributes: android:requiresSmallestWidthDp , android:compatibleWidthLimitDp , and android:largestWidthLimitDp . If you’re developing your application for Android 3.2 and higher, you should use these attributes to declare your screen size support, instead of the attributes based on generalized screen sizes.

For more information about how to properly support different screen sizes so that you can avoid using screen compatibility mode with your application, read Supporting Multiple Screens.

attributes: android:resizeable Indicates whether the application is resizeable for different screen sizes. This attribute is true, by default. If set false, the system will run your application in screen compatibility mode on large screens.

This attribute is deprecated. It was introduced to help applications transition from Android 1.5 to 1.6, when support for multiple screens was first introduced. You should not use it.

android:smallScreens Indicates whether the application supports smaller screen form-factors. A small screen is defined as one with a smaller aspect ratio than the «normal» (traditional HVGA) screen. An application that does not support small screens will not be available for small screen devices from external services (such as Google Play), because there is little the platform can do to make such an application work on a smaller screen. This is «true» by default. android:normalScreens Indicates whether an application supports the «normal» screen form-factors. Traditionally this is an HVGA medium density screen, but WQVGA low density and WVGA high density are also considered to be normal. This attribute is «true» by default. android:largeScreens Indicates whether the application supports larger screen form-factors. A large screen is defined as a screen that is significantly larger than a «normal» handset screen, and thus might require some special care on the application’s part to make good use of it, though it may rely on resizing by the system to fill the screen.

The default value for this actually varies between some versions, so it’s better if you explicitly declare this attribute at all times. Beware that setting it «false» will generally enable screen compatibility mode.

android:xlargeScreens Indicates whether the application supports extra large screen form-factors. An xlarge screen is defined as a screen that is significantly larger than a «large» screen, such as a tablet (or something larger) and may require special care on the application’s part to make good use of it, though it may rely on resizing by the system to fill the screen.

The default value for this actually varies between some versions, so it’s better if you explicitly declare this attribute at all times. Beware that setting it «false» will generally enable screen compatibility mode.

This attribute was introduced in API level 9.

android:anyDensity Indicates whether the application includes resources to accommodate any screen density.

Читайте также:  Forkplayer для андроид трешбокс

For applications that support Android 1.6 (API level 4) and higher, this is «true» by default and you should not set it «false» unless you’re absolutely certain that it’s necessary for your application to work. The only time it might be necessary to disable this is if your app directly manipulates bitmaps (see the Supporting Multiple Screens document for more information).

android:requiresSmallestWidthDp Specifies the minimum smallestWidth required. The smallestWidth is the shortest dimension of the screen space (in dp units) that must be available to your application UI—that is, the shortest of the available screen’s two dimensions. So, in order for a device to be considered compatible with your application, the device’s smallestWidth must be equal to or greater than this value. (Usually, the value you supply for this is the «smallest width» that your layout supports, regardless of the screen’s current orientation.)

For example, a typical handset screen has a smallestWidth of 320dp, a 7″ tablet has a smallestWidth of 600dp, and a 10″ tablet has a smallestWidth of 720dp. These values are generally the smallestWidth because they are the shortest dimension of the screen’s available space.

The size against which your value is compared takes into account screen decorations and system UI. For example, if the device has some persistent UI elements on the display, the system declares the device’s smallestWidth as one that is smaller than the actual screen size, accounting for these UI elements because those are screen pixels not available for your UI. Thus, the value you use should be the minimum width required by your layout, regardless of the screen’s current orientation.

If your application properly resizes for smaller screen sizes (down to the small size or a minimum width of 320dp), you do not need to use this attribute. Otherwise, you should use a value for this attribute that matches the smallest value used by your application for the smallest screen width qualifier ( sw dp ).

Caution: The Android system does not pay attention to this attribute, so it does not affect how your application behaves at runtime. Instead, it is used to enable filtering for your application on services such as Google Play. However, Google Play currently does not support this attribute for filtering (on Android 3.2), so you should continue using the other size attributes if your application does not support small screens.

smallScreens , normalScreens , largeScreens , or xlargeScreens attributes are used instead to determine the smallest screen required.

This attribute was introduced in API level 13.

android:compatibleWidthLimitDp This attribute allows you to enable screen compatibility mode as a user-optional feature by specifying the maximum «smallest screen width» for which your application is designed. If the smallest side of a device’s available screen is greater than your value here, users can still install your application, but are offered to run it in screen compatibility mode. By default, screen compatibility mode is disabled and your layout is resized to fit the screen as usual, but a button is available in the system bar that allows the user to toggle screen compatibility mode on and off.

If your application is compatible with all screen sizes and its layout properly resizes, you do not need to use this attribute.

Note: Currently, screen compatibility mode emulates only handset screens with a 320dp width, so screen compatibility mode is not applied if your value for android:compatibleWidthLimitDp is larger than 320.

This attribute was introduced in API level 13.

android:largestWidthLimitDp This attribute allows you to force-enable screen compatibility mode by specifying the maximum «smallest screen width» for which your application is designed. If the smallest side of a device’s available screen is greater than your value here, the application runs in screen compatibility mode with no way for the user to disable it.

If your application is compatible with all screen sizes and its layout properly resizes, you do not need to use this attribute. Otherwise, you should first consider using the android:compatibleWidthLimitDp attribute. You should use the android:largestWidthLimitDp attribute only when your application is functionally broken when resized for larger screens and screen compatibility mode is the only way that users should use your application.

Note: Currently, screen compatibility mode emulates only handset screens with a 320dp width, so screen compatibility mode is not applied if your value for android:largestWidthLimitDp is larger than 320.

This attribute was introduced in API level 13.

Источник

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