Android sp vs dp text - что бы регулировать "масштаб" и что является философией поддержки

Таким образом, мы знаем из многих других сообщений, что мы должны использовать sp, а не dp для текста на Android, и мы знаем, что причиной этого является уважение "пользовательских настроек".

Но каковы эти предпочтения? Как пользователь может изменить этот параметр?

Я не могу найти ссылку с помощью настроек на моем телефоне (я бы ожидал чего-то в "Доступность" или "Экран" ). Итак, что такое пользовательская настройка? Это делается только с помощью таких приложений, как "Большой шрифт"?

Предполагая, что он (установлен каким-то большим шрифтом) - я играл с Google Docs и некоторыми другими приложениями Google с установленным шрифтом на 130%. В то время как большая часть макетов остается в порядке, некоторые немного отключаются и не могут быть прочитаны (и это на большом экране SGS2). Итак, каков подход к разработке приложений с размерами текста с использованием "sp"? Уверяем ли мы, что он работает на 100% масштабировании, а затем игнорирует другие настройки - назовите это особым случаем, о котором может беспокоиться пользователь, или мы не делаем этого, чтобы убедиться, что все расширяется или прокручивается, если текст переполняется

Один из аргументов заключается в том, что мы должны использовать "dp", чтобы гарантировать, что пользователь имеет возможность увидеть текст (даже если он должен использовать увеличительное стекло)

Мысли/комментарии?

Ответ 1

Он отображается в меню настроек на некоторых устройствах Android (зависит от производителя). Он также может быть изменен некоторыми параметрами доступности (зависит от устройства).

В общем, вы всегда должны использовать не зависящие от масштаба пиксели, особенно для большого текста.

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

В двух словах: увеличит ли размер текста примерно на 5 сП, чтобы текст был нечитаемым или исказил ваш интерфейс? Если это так, используйте независимые от плотности пиксели. Если нет, используйте не зависящие от масштаба пикселы. Однако вы должны, как правило, стремиться использовать независимые от масштаба размеры пикселей, что означает разработку пользовательского интерфейса, который может вместить разные размеры текста.

Ответ 2

Использование модуля sp рекомендуется для текста, потому что в ICS и выше (может быть, Honeycomb тоже, исправьте меня, если я ошибаюсь), есть предпочтение размеру пользовательского шрифта. Итак, если вы используете Gingerbread или ниже, вы не сможете найти эту настройку.

Предпочтение отдается настройкам, дисплею, размеру шрифта. Также есть опция в разделе "Настройки", "Доступность", "Большой текст".

Чтобы решить вопрос о том, как использовать sp, обратите внимание, что по умолчанию без изменения каких-либо параметров размера шрифта 1sp эквивалентно 1dp (также они эквивалентны до того, как предпочтение было введено). Как вы уже отмечали, проектирование для случая, когда пользователь имеет огромный текст, вероятно, потребует, чтобы вам потребовалось прокрутить туда, где вы иначе не могли бы ожидать.

Ответ 3

Ответ заключается в том, чтобы рассматривать этот конкретный вопрос целостно.

Мотивация использования "sp" для размеров шрифтов заключается в предоставлении разработчику возможности контролировать свой макет перед лицом изменения размера шрифта на своем устройстве.

Пример:

Давайте рассмотрим два крайних случая:

1) Пользователь выбирает размер шрифта "маленький"

Вот как выглядит мой макет:

http://postimg.org/image/kiyqeo2bh/

Вот макет xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context=".MainActivity"
android:orientation="vertical">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="0"
    android:layout_column="0"
    android:text="Material-Design ist die Scheiße"
    android:textSize="18sp"
    android:background="#ffff0000" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="0"
    android:layout_column="0"
    android:text="Material-Design ist die Scheiße"
    android:textSize="25sp"
    android:background="#ffff0000" />

2) Если пользователь выбирает размер шрифта "огромный":

Это я, как выглядит мой макет:

http://postimg.org/image/d7rax9wob/

Мой макет xml такой же, как и в случае 1).

Итак, как вы можете видеть, что произошло здесь, верхний TextView имеет отличный размер шрифта в sp, потому что он не обертывает весь диапазон размеров шрифтов (от малого до огромного). Но нижний TextView полностью испортил ваш макет/дизайн в случае 2).

Итак, вы, как разработчик, можете перебирать и решать, какой размер в sp работает для вашего дизайна, и андроид сделает его для вас.

Ответ 4

px
Pixels - corresponds to actual pixels on the screen.
in
Inches - based on the physical size of the screen.
1 Inch = 2.54 centimeters
mm
Millimeters - based on the physical size of the screen.
pt
Points - 1/72 of an inch based on the physical size of the screen.
dp or dip
Density-independent Pixels - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Note: The compiler accepts both "dip" and "dp", though "dp" is more consistent with "sp".
sp
Scale-independent Pixels - this is like the dp unit, but it is also scaled by the user font size preference. It is recommended you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user preference.
From Understanding Density Independence In Android:

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
More info can be also be found in the Google Design Documentation.