Поиск…


замечания

Условия и понятия

Размер экрана

Фактический физический размер, измеренный как диагональ экрана. Для простоты Android группирует все фактические размеры экрана в четыре обобщенных размера: маленький, обычный, большой и очень большой.

Плотность экрана

Количество пикселей в физической области экрана; обычно называемый dpi (точек на дюйм). Например, экран с низкой плотностью имеет меньше пикселей в заданной физической области по сравнению с экраном с «нормальной» или «высокой» плотностью. Для простоты Android группирует все фактические плотности экрана в шесть обобщенных плотностей: низкое, среднее, высокое, сверхвысокое, сверх-экстра-высокое и сверх-экстра-экстра-высокое.

ориентация

Ориентация экрана с точки зрения пользователя. Это либо пейзаж, либо портрет, что означает, что соотношение сторон экрана является либо широким, либо высоким, соответственно. Помните, что по умолчанию разные устройства работают не только в разных ориентациях, но и во время работы, когда пользователь поворачивает устройство, ориентация может измениться. Разрешение Общее количество физических пикселей на экране. При добавлении поддержки нескольких экранов приложения не работают напрямую с разрешением; приложения должны касаться только размера экрана и плотности, как это определено обобщенными группами размеров и плотности. Независимый от плотности пиксель (dp) Элемент виртуального пикселя, который следует использовать при определении компоновки пользовательского интерфейса, чтобы выразить размеры или положение макета независимо от плотности. Независимый от плотности пиксель эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм, который представляет собой базовую плотность, принимаемую системой для экрана средней плотности. Во время работы система прозрачно обрабатывает любое масштабирование блоков dp ​​по мере необходимости, исходя из фактической плотности используемого экрана. Преобразование блоков dp ​​в пиксели экрана просто: px = dp * (dpi / 160). Например, на экране с разрешением 240 точек на дюйм 1 дп равен 1,5 физическим пикселям. Вы всегда должны использовать модули dp при определении пользовательского интерфейса вашего приложения, чтобы обеспечить правильное отображение вашего интерфейса на экранах с различной плотностью.


Единицы

  • ПВ

    Пиксели - соответствуют фактическим пикселям на экране.

  • в

    Дюймы - на основе физического размера экрана. 1 дюйм = 2,54 сантиметра

  • мм

    Миллиметры - в зависимости от физических размеров экрана.

  • пт

    Очки - 1/72 дюйма в зависимости от физического размера экрана.

  • dp или dip

    Плотно-независимые пиксели - абстрактный блок, основанный на физической плотности экрана. Эти единицы относятся к экрану с разрешением 160 точек на дюйм, поэтому один пиксель составляет один пиксель на экране с разрешением 160 точек на дюйм. Отношение dp-to-pixel будет меняться с плотностью экрана, но не обязательно в прямой пропорции. Примечание. Компилятор принимает как «dip», так и «dp», хотя «dp» более соответствует «sp».

  • зр

    Масштабируемые пиксели - это похоже на блок dp, но он также масштабируется по предпочтению размера шрифта пользователя. Рекомендуется использовать этот аппарат при задании размеров шрифта, поэтому они будут настроены как по плотности экрана, так и по предпочтениям пользователя. От понимания независимости плотности в Android:


Единица измерения Описание Единицы на физический дюйм Независимость от плотности Один и тот же физический размер на каждом экране
ПВ Пиксели Различная нет нет
в дюймов 1 да да
мм миллиметры +25,4 да да
пт Точки 72 да да
дп Плотность независимых пикселей ~ 160 да нет
зр Масштабировать независимые пиксели ~ 160 да нет

Рекомендации:

Использование спецификаторов конфигурации

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

Чтобы использовать квалификатор конфигурации:

  1. Создайте новый каталог в директории res / проекта и назовите его в формате: <resources_name>-<qualifier> . <resources_name> - это стандартное имя ресурса (например, drawable или layout).
  2. <qualifier> - это спецификатор конфигурации, определяющий конфигурацию экрана, для которой эти ресурсы должны использоваться (например, hdpi или xlarge).

Например, следующие каталоги ресурсов приложений предоставляют различные схемы компоновки для разных размеров экрана и различных чертежей. Используйте mipmap/ folders для значков запуска.

res/layout/my_layout.xml              // layout for normal screen size ("default")
res/layout-large/my_layout.xml        // layout for large screen size
res/layout-xlarge/my_layout.xml       // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml  // layout for extra-large in landscape orientation

res/drawable-mdpi/graphic.png         // bitmap for medium-density
res/drawable-hdpi/graphic.png         // bitmap for high-density
res/drawable-xhdpi/graphic.png        // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png       // bitmap for extra-extra-high-density

res/mipmap-mdpi/my_icon.png         // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png         // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png        // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png       // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png      // launcher icon for extra-extra-extra-high-density

Преобразование dp и sp в пиксели

Когда вам нужно установить значение пикселя для чего-то вроде Paint.setTextSize но все же хотите, чтобы оно масштабировалось на основе устройства, вы можете преобразовать значения dp и sp.

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12f, metrics);

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, metrics);

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="size_in_sp">12sp</dimen>
    <dimen name="size_in_dp">12dp</dimen>
</resources>

// Get the exact dimension specified by the resource
float pixels = context.getResources().getDimension(R.dimen.size_in_sp);
float pixels = context.getResources().getDimension(R.dimen.size_in_dp);

// Get the dimension specified by the resource for use as a size.
// The value is rounded down to the nearest integer but is at least 1px.
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_dp);

// Get the dimension specified by the resource for use as an offset.
// The value is rounded down to the nearest integer and can be 0px.
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_dp);

Размер текста и различные размеры экрана для Android

Иногда лучше иметь только три варианта

 style="@android:style/TextAppearance.Small"
 style="@android:style/TextAppearance.Medium"
 style="@android:style/TextAppearance.Large"

Используйте маленькие и большие, чтобы отличать нормальный размер экрана.

<TextView
        android:id="@+id/TextViewTopBarTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/TextAppearance.Small"/>

Для нормального вам ничего не нужно указывать.

<TextView
        android:id="@+id/TextViewTopBarTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow