Яка різниця між "px", "dip", "dp" та "sp"?


5813

Яка різниця між одиницями вимірювання Android?

  • px
  • занурити
  • д.п.
  • сп

65
це використання повної різниці між px, dip, dp та sp в android [ developer.android.com/guide/topics/resources/…
NagarjunaReddy,

20
Цей чудовий конвертер найкраще демонструє це , на мою думку. Це також надзвичайно корисно для експорту спрайтів із Photoshop або розробки макета для фізичного виміру.
Пол Ламмерцма

9
новий опис в Google Дизайнерські одиниці та вимірювання
Арнав М.


1
Дизайн матеріалу з матеріалом
layout/…

Відповіді:


5770

З Документації для розробників Android :

  1. px
    Пікселі - відповідає фактичним пікселям на екрані.

  2. в
    дюймах - виходячи з фізичного розміру екрана.
    1 дюйм = 2,54 сантиметра

  3. мм
    міліметри - виходячи з фізичного розміру екрана.

  4. pt
    Бали - 1/72 дюйма на основі фізичного розміру екрана.

  5. dp або dip
    Density -незалежні пікселі - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp - це один піксель на екрані 160 dpi. Співвідношення dp-пікселя змінюватиметься із щільністю екрана, але не обов'язково в прямому співвідношенні. Примітка: Компілятор приймає і "dip", і "dp", хоча "dp" більше відповідає "sp".

  6. sp
    Масштаб -незалежні пікселі - це подібно до одиниці dp, але вона також масштабується відповідно до розміру шрифту користувача. Рекомендується використовувати цей пристрій, визначаючи розміри шрифту, щоб вони були відрегульовані як за щільністю екрану, так і за налаштуваннями користувача.

Від розуміння незалежності щільності в 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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Більш детальну інформацію можна знайти в проектній документації Google .


17
незважаючи на те, що вони повинні бути одними і тими ж, у мене, як правило, виникають багато проблем з dp, в той час як все добре працює з dip
DallaRosa

247
Одне зауваження про db / sp, яке не зовсім очевидно: Масштабування, яке відбувається для цього, залежить не від реальної щільності пристрою (dpi), а від того, на яке "відро" щільності вона потрапляє: наявні відра: 120,160,240,320. Це може спричинити деякі проблеми із керуванням екранами, які суттєво відрізняються, але отримують ті ж самі доходи.
Fraggle

15
Зауважте, що в документації більше не згадується "dip", а лише "dp", хоча компілятор все ще, здається, приймає "dip".
Адам Розенфілд

15
@android_developer (5 коментарів вище) dpзовсім НЕ мають точно таку ж фізичну довжину. (Хоча це і близько.) Дивіться коментар @ Fraggle про видобуток. Це означає, що 48dp буде приблизно 8 мм (0,3 дюйма), але може змінюватися до 11 мм.
intrepidis

11
Причина того, що розширюється, полягає в тому, що розробники можуть тестувати свої програми на кількох пристроях різної щільності та бути впевненими, що макети будуть виглядати однаково на багатьох пристроях. Тож навіть якщо фізичний розмір кнопок тощо трохи зміниться, загальний вигляд діяльності буде однаковим.
intrepidis

684

Тут дуже добре зафіксовано все, що стосується цього, і як досягти найкращої підтримки для декількох екранів різної величини та щільності:

Розмір екрана
Фактичний фізичний розмір, виміряний як діагональ екрану. Для простоти Android об'єднує всі фактичні розміри екрану на чотири узагальнені розміри: малий, звичайний, великий та надзвичайно великий.

Щільність екрана
Кількість пікселів у фізичній області екрана; зазвичай називають dpi (крапки на дюйм). Наприклад, екран з "низькою" щільністю має менше пікселів у межах певної фізичної області порівняно з екраном "нормальної" або "високої" щільності. Для простоти Android групує всі фактичні щільності екрану на шість узагальнених щільностей: низька, середня, висока, надвисока, екстра-надвисока та екстра-екстра-екстра-висока.

Орієнтація
Орієнтація екрана з точки зору користувача. Це або пейзаж, або портрет, тобто співвідношення сторін екрана відповідно або широке, або високе. Майте на увазі, що за замовчуванням різні пристрої працюють у різних орієнтаціях, але орієнтація може змінюватися під час виконання, коли користувач повертає пристрій.

Роздільна здатність
Загальна кількість фізичних пікселів на екрані. При додаванні підтримки для декількох екранів програми не працюють безпосередньо з роздільною здатністю; програми повинні стосуватися лише розміру та щільності екрана, як це визначено узагальненими групами розмірів та щільності.

Піксель, незалежний від щільності (dp)
Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Незалежний від щільності піксель еквівалентний одному фізичному пікселю на екрані 160 dpi, що є базовою щільністю, прийнятою системою для екрана "середньої" щільності. Під час виконання програма прозоро обробляє будь-яке масштабування блоків dp, якщо це необхідно, виходячи з фактичної щільності екрана, який використовується. Перетворення Dp одиниць пікселів екрану проста: px = dp * (dpi / 160). Наприклад, на екрані з 240 dpi 1 dp дорівнює 1,5 фізичних пікселів. Ви завжди повинні використовувати одиниці dp, визначаючи інтерфейс програми, щоб забезпечити належне відображення вашого інтерфейсу на екранах з різною щільністю.

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


41
Отже, якщо ви використовуєте dp для кнопки і sp для розміру шрифту тексту кнопки, що відбувається, коли користувач починає масштабувати? Текст збільшиться, але чи буде це вміщено кнопкою, збільшивши?
Wytze

11
@Wytze, nope. Для речей, де вміщення тексту може бути проблемою, я б просто застосував dip, щоб речі не переповнювались.
eski

12
@Wytze І я, навпаки, використовую sp і для тексту, і для всього, що він містить. Наприклад, якщо у мене є кнопка з фіксованим розміром і текстом всередині неї, я призначив би розмір кнопки в sp, щоб він масштабувався і в разі потреби. В іншому випадку користувача буде дратувати те, що він збільшив розмір тексту, і він не збільшився. Звичайно, макет повинен бути досить гнучким, щоб це дозволяло.
Малькольм

2
Якщо ваші дизайнери не залишать місця для текстових елементів для масштабування відповідно до розміру sp, одним із варіантів є перехід на будь-який макет, який ви використовуєте для більш вузького пристрою, а потім масштабувати все рівномірно (DisplayMetrics.scaledDensity / DisplayMetrics). щільність).
Джон Меллор

@Сама відсутність вільного місця також спричинить проблеми під час i18n
зменшення активності

346

Я детальніше зупинюсь на тому, як саме dp перетворюється в px:

  • Якщо працює на пристрої mdpi, 150 x 150 pxзображення займе 150 * 150 dpекранний простір.
  • Якщо працює на пристрої hdpi, 150 x 150 pxзображення займе 100 * 100 dpекранний простір.
  • Якщо працює на пристрої xhdpi, 150x150 pxзображення займе 75 * 75 dpекранний простір.

Навпаки: скажіть, ви хочете додати зображення до своєї програми та вам це потрібно для заповнення елемента 100 * 100 dpкерування. Вам потрібно буде створити зображення різного розміру для підтримуваних розмірів екрана:

  • 100 * 100 px зображення для mdpi
  • 150 * 150 px зображення для hdpi
  • 200 * 200 px зображення для xhdpi

2
Як ми обчислюємо пікселі для hdpi, ldpi, mdpi тощо. Я чув, що ми використовуємо цю формулу. Px = dp * (dpi / 160); чи можете ви пояснити мені цю формулу PLZ?
Ракеш патанга

@ Ракешпатанга При щільності 160 dpi 1 px = 1 dp (фізична піксель та абстракція dp однакові). Тобто для одного dp ми маємо (1) * (160/160) = 1, або рівно 1 px. При більш високій щільності 320 dpi один dp дорівнює (1) * (320/160) = 2 пікселі, а два dp - (2) * (320/160) = 4 px.
Саміс

Вирівняйте їх у монопростір, щоб побачити: | 1dp |, | ___ | ___ | 160, | _ | _ | _ | _ | 320 (поставити розриви рядків після коми). | _ | = 1 p i x el.
Саміс

re "Вам потрібно буде створити зображення різного розміру для підтримуваних розмірів екрана:" Це залежить. Для невеликих висококонтрастних зображень, наприклад значків, розумно створити принаймні найменший розмір (щоб бути впевненим, що це буде чітко) плюс досить великий розмір (щоб великі версії не виглядали розмитими). Але навіть для піктограм ви можете дозволити одному зображенню масштабувати діапазон розмірів при більш високій щільності. Для фотографій просто вкажіть область відображення, яку ви бажаєте заповнити, і покладайтеся на масштабування пристрою.
ToolmakerSteve

285

px - Пікселі - точка за шкалою відповідає фактичним пікселям на екрані.

i - дюйми - залежно від фізичного розміру екрана.

мм - міліметри - виходячи з фізичного розміру екрана.

pt - Бали - 1/72 дюйма на основі фізичного розміру екрана.

dp - Пікселі, що не залежать від щільності, - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp- піксель на екрані 160 dpi. Співвідношення dp-пікселя змінюватиметься із щільністю екрана, але не обов'язково в прямому співвідношенні. Примітка: Компілятор приймає і те, dipі інше dp, хоча dpі більше відповідає sp.

sp - Незалежні від масштабування пікселі - це подібно до dpодиниці, але вона також масштабується відповідно до розміру шрифту користувача. Рекомендується використовувати цей пристрій, визначаючи розміри шрифту, щоб вони були відрегульовані як для щільності екрана, так і для переваг користувача.

Візьмемо для прикладу два екрани однакового розміру, але один має щільність екрана 160 dpi (крапки на дюйм, тобто пікселі на дюйм), а другий - 240 dpi.

                          Lower resolution screen     Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent pixels          240                               240
(“dip or dp or dps”)

Scale-independent pixels 
 (“sip or sp”)                  Depends on user font size settings    same

233

Крім того, ви повинні мати чітке розуміння наступних понять:

Розмір екрану:

Фактичний фізичний розмір, виміряний як діагональ екрану. Для простоти Android об'єднує всі фактичні розміри екрану на чотири узагальнені розміри: маленький, звичайний, великий та надзвичайно великий.

Щільність екрану:

Кількість пікселів у фізичній області екрану; зазвичай називають dpi (крапки на дюйм). Наприклад, екран з "низькою" щільністю має менше пікселів у межах певної фізичної області порівняно з екраном "нормальної" або "високої" щільності. Для простоти Android групує всі фактичні щільності екрану на чотири узагальнені щільності: низькі, середні, високі та надвисокі.

Орієнтація:

Орієнтація екрана з точки зору користувача. Це або пейзаж, або портрет, тобто співвідношення сторін екрана відповідно або широке, або високе. Майте на увазі, що за замовчуванням різні пристрої працюють у різних орієнтаціях, але орієнтація може змінюватися під час виконання, коли користувач повертає пристрій.

Роздільна здатність:

Загальна кількість фізичних пікселів на екрані. При додаванні підтримки для декількох екранів програми не працюють безпосередньо з роздільною здатністю; програми повинні стосуватися лише розміру та щільності екрана, як це визначено узагальненими групами розмірів та щільності.

Незалежний від щільності піксель (dp):

Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Незалежний від щільності піксель еквівалентний одному фізичному пікселю на екрані 160 dpi, що є базовою щільністю, прийнятою системою для екрана "середньої" щільності. Під час виконання програма прозоро обробляє будь-яке масштабування блоків dp, якщо це необхідно, виходячи з фактичної щільності екрана, який використовується. Перетворення одиниць dp у пікселі екрану просте: px = dp * (dpi / 160). Наприклад, на екрані з 240 dpi 1 dp дорівнює 1,5 фізичних пікселів. Ви завжди повинні використовувати одиниці dp, визначаючи інтерфейс програми, щоб забезпечити належне відображення інтерфейсу користувача на екранах різної щільності.

Довідка: Сайт розробників Android


Чи означає це, що все, що ви розробляєте за допомогою dp-одиниць, завжди буде займати однаковий% екрану, незалежно від щільності пікселів пристрою? Припускаючи однакові співвідношення сторін.
DBIT

198

dpє dip. Використовуйте його для всього (маржа, підкладка тощо).

Використовувати лише spдля {text-size}.


Щоб отримати однаковий розмір на різних щільності екрану, Android переводить ці одиниці в пікселі під час виконання, тому немає складної математики для вас.


Відчуваєте різницю між px, dpі spна різних розмірів екрану.

Введіть тут опис зображення

Джерело: Програмування Android: Посібник з ранчо великих рангів


143

Я обчислив формулу нижче, щоб здійснити перетворення dpiна dpтаsp введіть тут опис зображення


10
Це має бути ppi замість dpi
Prateek

141

Визначення

px або крапка - це піксель на фізичному екрані.

dpi - пікселі на дюйм на фізичному екрані і представляють щільність відображення.

Android дає псевдоніми імена для кількох густин

  • ldpi (низький) ~ 120dpi
  • mdpi (середній) ~ 160dpi
  • hdpi (високий) ~ 240dpi
    • Більшість пристроїв 2015 року тут
  • xhdpi (надзвичайно високий) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (надзвичайно високий) ~ 480dpi
    • Nexus 5
  • xxxhdpi (extra-extra-extra-high) ~ 640dpi

dip або dp - пікселі , що не залежать від щільності, тобто вони відповідають більшій чи меншій кількості пікселів залежно від фізичної щільності.

  • 1dp = 1px на mdpi

введіть тут опис зображення

sp або sip - піксель, незалежний від масштабу . Вони масштабуються, коли параметр " Великий текст " увімкнено в Settings>Accessibility

  • 1sp = 1dp
  • 1sp = 1.2dp з доступністю Великий текст

Що використовувати?

Використовуйте sp для розміру тексту.

Використовуйте dp для всього іншого.


128

Джерело 1

Джерело 2

Джерело 3 : (дані джерела 3 наведено нижче)

Це значення розмірів, визначені в XML. Розмір задається числом, за яким слід одиниця виміру. Наприклад: 10px, 2in, 5sp. Наступні одиниці вимірювання підтримуються Android:

д.п.

Пікселі, незалежні від щільності, - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi (крапки на дюйм), на якому 1dp приблизно дорівнює 1 px. Під час запуску на екрані з більшою щільністю кількість пікселів, які використовуються для малювання 1dp, збільшується на коефіцієнт, відповідний dpi екрану. Так само, коли на екрані нижчої щільності зменшується кількість пікселів, які використовуються для 1dp. Співвідношення dp-пікселя змінюватиметься із щільністю екрана, але не обов'язково в прямому співвідношенні. Використання dp-одиниць (замість px-одиниць) - це просте рішення, щоб зробити розміри подання у вашій компоновці належним чином змінити розмір екрана. Іншими словами, він забезпечує узгодженість розмірів елементів інтерфейсу користувача в реальному світі на різних пристроях.

сп

Незалежні від масштабування пікселі - це як одиниця dp, але вона також масштабується за налаштуваннями розміру шрифту користувача. Рекомендується використовувати цей пристрій, визначаючи розміри шрифту, щоб вони були відрегульовані як для щільності екрана, так і для споживача.

пт

Бали - 1/72 дюйма на основі фізичного розміру екрана.

px

Пікселі - відповідає фактичним пікселям на екрані. Ця одиниця вимірювання не рекомендується, оскільки фактичне представлення може відрізнятися в різних пристроях; кожен пристрій може мати різну кількість пікселів на дюйм і може мати більше або менше загальних пікселів на екрані.

мм

Міліметри - на основі фізичного розміру екрана.

в

Дюйми - на основі фізичного розміру екрана.

Примітка . Параметр - це простий ресурс, на який посилається значення, яке надається в атрибуті name (а не ім'я файлу XML). Таким чином, ви можете поєднувати параметри виміру з іншими простими ресурсами в одному XML-файлі під одним елементом.


9
Також: яка додаткова цінність цієї відповіді? Здається, немає нічого, про що вже не було сказано в інших відповідях.
laalto

118

В основному єдиний час, коли застосовується px, - це один px, і це якщо ви хочете рівно один піксель на екрані, як у випадку з дільником:

На> 160 точок на дюйм, ви можете отримати 2-3 пікселі,

На> 120 точок на дюйм, він округляється до 0.


getDimensionPixelOffset округляє вниз, getDimensionPixelSize округляє вгору.
Євген Печанець

101

px

Пікселі - відповідає фактичним пікселям на екрані.

dp або dip

Пікселі, незалежні від густини, - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp - це один піксель на екрані 160 dpi.

Використання dp:

Незалежність від щільності - Ваша програма досягає «незалежності від щільності», коли зберігає фізичний розмір (з точки зору користувача) елементів інтерфейсу користувача, коли відображається на екранах з різною щільністю. (тобто) Зображення має виглядати однакового розміру (не збільшуватись і не зменшуватися) на різних типах екранів.

сп

Пікселі, що не залежать від масштабів, - це як одиниця dp, але вона також масштабується за налаштуваннями розміру шрифту користувача.

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension


97

Де використовувати те, що стосунки між px & dp?

Незалежний від щільності піксель (dp)

Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Як описано вище, піксель, незалежний від щільності, еквівалентний одному фізичному пікселю на екрані 160 dpi, що є базовою щільністю, прийнятою системою для екрану "середньої" щільності. Під час виконання програма прозоро обробляє будь-яке масштабування блоків dp, якщо це необхідно, виходячи з фактичної щільності екрана, який використовується. Перетворення одиниць dp в пікселі екрану просте:

px = dp * (dpi / 160).

Наприклад, на екрані з 240 dpi 1 dp дорівнює 1,5 фізичних пікселів. Ви завжди повинні використовувати одиниці dp, визначаючи інтерфейс програми, щоб забезпечити належне відображення інтерфейсу користувача на екранах різної щільності.

Розуміння пікселів у dp та навпаки дуже важливо (особливо для надання точних значень dp творчій команді)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • Постарайтеся отримати всі значення пікселів у парних числах від творчого колективу. Інакше втрата точності відбудеться при множенні на 0,5.

px

Це пояснено вище. Намагайтеся уникати файлів компонування. Але є деякі випадки, коли потрібен px. наприклад, рядок розділення ListView. px тут краще для надання однопіксельної лінії як дільника для всіх роздільних можливостей екрана.

сп

Використовуйте sp для розмірів шрифту. Тоді лише шрифт всередині програми змінюватиметься, коли розмір шрифтів пристрою змінюватиметься (тобто відображати -> Шрифти на пристрої). Якщо ви хочете зберегти шрифт статичного розміру всередині програми, ви можете надати розмір шрифту в dp. У такому випадку вона ніколи не зміниться. Розробники можуть отримати таку вимогу для деяких конкретних екранів, для цього розробники можуть використовувати dp замість sp. У всіх інших випадках рекомендується використовувати sp.


89

Ви можете побачити різницю між малюнком pxі dpвід нього нижче, а також можна виявити, що pxта dpне могли гарантувати однакові фізичні розміри на різних екранах.

введіть тут опис зображення


3
@EnesBattal, я думаю, оскільки dp не є гострим фізичним розміром, це приблизне значення. Цитуючи з CapTech: "dp - Це незалежна від щільності одиниця, однак фізичний розмір одного" dp "є приблизно приблизно однаковим на кожній щільності екрану. В дюймі є приблизно 160" dp ". Коефіцієнт масштабування, залежно від на відро щільності пристрою застосовується для перетворення "dp" на кількість пікселів при 160 dpi. Кількість пікселів, яку один "dp" перекладає, змінюється в залежності від пікселя на щільності екрана та відра щільності, на який падає пристрій в ".
Зефір

3
@RuchirBaronia, я думаю, що DP або DIP все ще є всередині apk, оскільки apk ще не знає, з якою щільністю екрану він буде працювати, тому незалежність пристрою все одно повинна зберігатися.
Зефір

79

Будь-яке, що пов'язане з розміром тексту та зовнішнім виглядом, має використовувати spабо pt. В той час, як все, що стосується розміру елементів керування, макетів тощо, слід використовувати dp.

Ви можете використовувати як dpі dipв його місцях.


69

Я б використовував лише dp.

Існує багато розмов про використання "sp" для розміру шрифту, і, хоча я ціную це, я не думаю, що це правильно робити з дизайнерської точки зору. Ви можете порушити свій дизайн, якщо у користувача є якийсь вибагливий вибір розміру шрифту, і користувач зрештою звинувачує додаток , а не власний життєвий вибір.

Крім того, якщо взяти додаток sp-font на планшеті потужністю 160 dpi, ви побачите, що все збільшується вгору ... але ваш шрифт, який буде виглядати крихітним порівняно. Це не гарний вигляд.

Хоча ідея "sp" шрифтів має гарне серце, це погана ідея. Дотримуйтесь dp для всього.


1
Ви знаєте, що коефіцієнт масштабу шрифту, застосований до цього, spє фактором, правда? Все, що впливає dp, також вплине sp. Однак, бажано вказувати розміри шрифту dpзамість того, spякщо ваш макет дуже щільний, а більші розміри не підходять - краще, щоб текст був меншим, ніж те, що користувач хоче, щоб повністю заплутаний макет. Але в першу чергу ви завжди повинні прагнути дотримуватись переваг розміру шрифту користувача - навіть найбільший параметр не такий, що великий.
Кару

67

sp = незалежний піксель від масштабу

dp = dip = незалежні пікселі щільності

dpi = крапки на дюйм

Ми повинні уникати використання sp .

Ми повинні використовувати dp для підтримки декількох екранів.

Android підтримує різні дозволи екрана

  • ldpi (низький) ~ 120 dpi
  • mdpi (середній) ~ 160 dpi
  • hdpi (висока) ~ 240 dpi
  • xhdpi (надзвичайно високий) ~ 320 dpi
  • xxhdpi (надзвичайно високий) ~ 480 dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640 dpi

Пристрій ldpi з 120 dp має 120 пікселів розміром в 1 дюйм.

Те ж саме для інших густин ...

Ми, як інженери програмного забезпечення, повинні використовувати цю формулу перетворення:

піксель = dp * (щільність / 160)

Отже, на 1 dp пристрою 240 dpi прийде = 1 * (240/160) = 3/2 = 1,5 пікселя.

І 480 dpi пристрою на 1 dp матиме = 1 * (480/160) = 3 пікселя.

Використовуючи це знання 1,5 та 3 пікселів, інженер-програміст може розробити макети для різної щільності.

Щоб перевірити параметри екрана будь-якого пристрою:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();

Дуже хороший підручник для розуміння: HTTP: /vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer
Kushal

5
"Ми повинні уникати використання sp" Чому це? Ви повинні використовувати sp при роботі з розмірами шрифту, оскільки він враховує бажаний розмір тексту користувача, developer.android.com/training/multiscreen/screendensities.html
ci_

Я відповів стосовно точки зору макета. Будь ласка, прочитайте на наданому вами посиланні ", тому ви повинні використовувати цю одиницю вимірювання при визначенні розміру тексту (але ніколи для розмірів макета)".
Кушаль

Питання було "Різниця між px, dp, dip та sp в Android?" Ваша відповідь сказала: "Ми повинні уникати використання sp". Ніде не згадувалося про "макет перспективи".
ci_

Так .. dp і dip однакові ... використовуються взаємозамінно ... Чи моя відповідь вирішує ваш запит?
Кушаль

61

Різниця між dpі spодиницями, зазначеними як " перевагу розміру шрифту користувача " у відповідях, скопійованих з офіційної документації, можна побачити під час виконання, змінивши Settings->Accessibility->Large Textпараметр.

Large Textопція змушує текст 1.3збільшуватися в рази.

private static final float LARGE_FONT_SCALE = 1.3f;

Це, звичайно, може залежати від постачальника, оскільки воно лежить у пакунках / програмах / налаштуваннях .


52

dpi -

  • Крапки на дюйми
  • Вимірювання щільності пікселів на екрані.

px - піксель

  • Для відображення пікселів екрана

pt - бали

  • Приблизно 1/72 дюйма, щодо фізичного розміру екрана.

дюймовий - щодо фізичного розміру екрана (1 дюйм = 2,54 см).

мм-міліметр - щодо фізичного розміру екрана.

sp - незалежний від масштабу піксель.

  • На основі переваг розміру шрифту користувача.
  • Шрифт повинен бути в 'sp'.

занурити -

  • занурити == дп
  • Щільність незалежного пікселя.
  • Він змінюється залежно від щільності екрана.
  • У екрані 160 dpi, 1 dp = 1 піксель.
  • Використовуйте dp, крім розміру шрифту тексту.

У стандарті використовуються dp і sp. sp за розмір шрифту та dp для всього іншого.

Формула для перетворення одиниць:

px = dp * (dpi / 160);

Density Bucket -> Screen Display => 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  

Відповідно до документації. Компілятор приймає і "dip", і "dp", хоча "dp" більше відповідає "sp".
Arunendra

46

Ось формула, яку використовує Android:

px = dp * (dpi / 160)

Де dpi - одна з наступних щільності екрана. Для переліку всіх можливих густин перейдіть сюди

Він визначає константи "DENSITY_ *".

  • ldpi (низький) ~ 120dpi
  • mdpi (середній) ~ 160dpi
  • hdpi (високий) ~ 240dpi
  • xhdpi (надзвичайно високий) ~ 320dpi
  • xxhdpi (надзвичайно високий) ~ 480dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640dpi

Взято звідси .

Це дозволить розібратися у великій плутанині при перекладі між px та dp, якщо ви знаєте, що ваш dpi на екрані.

Скажімо, ви хочете, щоб зображення на екрані hdpi становило 60 dp, тоді розмір фізичного пікселя 60 dp становить:

px = 60 * (240 / 160)

45

Розмір екрану в Androidзгрупована по категоріям small, medium, large, extra large, double-extraі triple-extra. Щільність екрана - це кількість пікселів у межах (як дюйм) екрана. Зазвичай він вимірюється в точках на дюйм (dpi). Щільність екрана групується як низька, середня, висока та надвисока. Роздільна здатність - загальна кількість пікселів на екрані.

  • dp: Незалежний піксель щільності, він змінюється залежно від щільності екрана. У екрані 160 dpi, 1 dp = 1 піксель. За винятком розміру шрифту, використовуйте dp завжди.
  • dip: dip == dp. У більш ранніх версіях Android використовувався dip, а пізніше змінювався на dp.
  • sp: масштабування незалежного пікселя, масштабоване на основі переваг розміру шрифту користувача. Шрифти повинні використовувати sp.
  • px: наш звичайний стандартний піксель, який відображається на піксельному екрані.
  • в: дюйми, щодо фізичного розміру екрана.
  • мм: міліметри, щодо фізичного розміру екрана.
  • pt: 1/72 дюйма щодо фізичного розміру екрана.

Формула для перетворення між одиницями

 px = dp * (dpi / 160)

dp до px у пристрої

Наступний приклад може допомогти зрозуміти краще. Масштабування відбувається на основі розміру відра 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) і 640 (xxxhdpi). Пропоноване Google співвідношення для проектування становить 3: 4: 6: 8: 12 для ldpi: mdpi: hdpi: xhdpi: xxhdpi

Зображення розміром 150px X 150px займе,

  • Простір екрана 150 dp X 150 dp в mdpi
  • 100 dp X 100 dp простір екрана в hdpi
  • 75 dp X 75 dp простір екрана в xhdpi

Ви можете використовувати наступний калькулятор DPI для виправлення розмірів зображення та інших розмірів, коли ви хочете мати єдиний дизайн інтерфейсу на всіх пристроях Android.

DPI Калькулятор на Java

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

Більше інформації див. За посиланням.

http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/


45

Будь ласка, прочитайте відповідь із вікі спільноти. Нижче згадуються деякі відомості, які слід враховувати на додаток до вищезазначених відповідей. Більшість розробників Android пропускають це під час розробки програм, тому я додаю ці моменти.

sp = незалежний піксель від масштабу

dp = незалежні пікселі щільності

dpi = пікселі щільності

Я пережив наведені вище відповіді ... не вважаючи їх точно правильними. sp для розміру тексту, dp для меж макета - стандарт. Але sp для розміру тексту порушить макет, якщо використовувати його необережно на більшості пристроїв.

sp приймайте текст тексту пристрою, тоді як dp приймає стандарт густини пристрою (ніколи не змінюється в пристрої). Скажімо, текст 100sp може займати 80% екрана або 100% екрана, залежно від розміру шрифту, встановленого на пристрої

введіть тут опис зображення

Ви також можете використовувати sp для меж розташування, це буде працювати :) Немає стандартних програм для використання sp для цілого тексту

Використовуйте sp і dp для розміру тексту з урахуванням UX.

  • Не використовуйте sp для тексту на панелі інструментів (можна використовувати розміри Android для різних розмірів екрана з dp)
  • Не використовуйте sp для тексту невеликими обмеженими кнопками, дуже маленьким текстом тощо

Деякі люди використовують величезний розмір FONT у своєму телефоні для більшої читабельності, надаючи їм невеликий текст у форматі твердого коду, буде проблемою UX. Покладіть текст sp для тексту, де це необхідно, але переконайтеся, що він не порушить макет, коли користувач змінить свої налаштування.

Аналогічно, якщо у вас є одна програма, яка підтримує всі параметри, додавання активів xxxhdpi значно збільшує розмір програми. Але зараз телефони xxxhdpi є загальними, тому ми повинні включати активи xxxhdpi як мінімум для піктограм у бічній панелі, панелі інструментів та нижній панелі. Краще перейти до векторних зображень, щоб мати рівномірні та якісніші зображення для всіх розмірів екрана.

Також зауважте, що користувачі користуються спеціальним шрифтом у своєму телефоні. Тож відсутність шрифту може спричинити проблеми з інтервалом і всім іншим. Скажімо, розмір тексту 12 шт для спеціального шрифту може займати деякі пікселі, крім шрифту за замовчуванням.

Зверніться до веб-сайту розробника google, щоб ознайомитися з показниками екранізації та основними відомостями щодо Android. https://developer.android.com/training/multiscreen/screendensities


43
  • px - один піксель, те саме, що використовується в CSS, JavaScript тощо.
  • sp - незалежні від масштабу пікселі
  • dip - незалежні від щільності пікселі

Зазвичай sp використовується для розміру шрифту, тоді як dip використовується для інших (також називається dp).


39

Я натрапив на хорошу статтю про розробку інтерфейсу програм для Android для різних дозволів екрана, і я хотів би залишити його лише для тих, хто шукає в цій області. Так, я знаю, що це якимось чином описано в документах Google (і згадується у публікаціях вище), я читав це, але це було недобре для мене (так, я можу бути занадто дурним)). Для мене залишилося незрозумілим, як створити макети, здатні обробляти різний розмір екрана. Я ненавиджу концепцію DP тощо, коли мені потрібно реалізувати "гнучкий" макет інтерфейсу для різних екранів. (Ей, розробники iOS - так, ви праві, це концепція Storyboard).

Android не має поганої концепції інтерфейсу, але, на жаль, не вистачає функцій iOS Storyboard. Розробка гнучких інтерфейсів в Android - справа не найкраща (в кращому випадку).

Ось стаття, яка допомогла мені зрозуміти, що робити в Android, щоб робити макети для різних розмірів екрана:

Блог JMSTUDIO: - Визначте розмір екрана програми для Android

Як створити інтерфейс для додатків для Android для різного розміру екрана

Щоб розробити інтерфейс програми для різних розмірів екрана, наш початковий дизайн повинен відповідати мінімально необхідному простору для кожного розміру екрана. Android визначає мінімальний розмір (у dp) для кожного узагальненого типу екрана. Ось інструкція щодо розміру екрана Android. Мінімальний розмір екрана для Android у dp Коли ми отримуємо розмір екрана в dp, нам недостатньо розробити інтерфейс програми для Android. Для кожного розміру екрана нам потрібно підготувати графічні та растрові зображення для кожної щільності. Ось інструкція щодо щільності екрана Android. Настанова щодо щільності Android (dpi)

Для легкого обчислення ми можемо прослідкувати коефіцієнт масштабування 3: 4: 6: 8 між чотирма узагальненими густинами. Якщо ми створимо зображення 36 × 36 пікселів для пристрою ldpi, розмір картинок щільності для решти буде 48 × 48 для mdpi, 72 × 72 для hdpi та 96 × 96 для xhdpi.

Як розробити інтерфейс програм для Android в Photoshop

У багатьох дизайнерів виникають проблеми при розробці інтерфейсу програми для Android у Photoshop або інших інструментах графічного дизайну на основі пікселів через незалежний від щільності блок, dp. Дизайнери не знають, як зіставити dp на піксель. Google також не дає чіткого керівництва по дизайну інтерфейсу Android для них, хоча вони дають основну формулу перекладу на dp та пікселі.

Як визначає Android, 1pd дорівнює 1px при пристрої 160 dpi (mdpi). Отже, ми хочемо розробити додаток для Android для великого пристрою Android з щільністю mdpi. Ми можемо визначити наш розмір інтерфейсу в пікселях як 960 пікселів у ширину та 720 пікс у висоту; Дотримуючись того самого правила картографування, ми можемо дотримуватися інструкцій щодо дизайну інтерфейсу користувача для розміру екрана Android:

Розмір екрана програми для Android у Pixel Guideline

ДОБАВЛЕНО : Якщо вас також цікавить "гнучкий" інтерфейс користувача, ознайомтеся з цією бібліотекою: Android SDK, який пропонує нову одиницю розміру - sdp (масштабований dp). Ця одиниця розміру масштабується з розміром екрана (про це також згадується у відповіді тут, проSDP бібліотеку)

ADDED2 Google нарешті зрозумів корисність інтерфейсу інтерфейсу iOS Storeboard, і тут ідеться ConstraintLayoutпро Android для світу: Створіть чуйний інтерфейс з ConstraintLayout


32

1) dp: (density independent pixels)

Кількість пікселів, представлених в одній одиниці dp, збільшуватиметься із збільшенням роздільної здатності екрана (коли у вас більше точок / пікселів на дюйм). І навпаки, на пристроях із меншою роздільною здатністю кількість пікселів, представлених на одиниці dp, зменшиться. Оскільки це відносна одиниця, вона повинна мати базову лінію для порівняння. Цей базовий рівень - це екран з роздільною здатністю 160 dpi. Це рівняння:px = dp * (dpi / 160).


2) sp: (scale independent pixels)

Цей пристрій масштабує відповідно до екрана dpi (схожого на dp), а також за налаштуваннями розміру шрифту користувача.


3) px: (pixels)

Фактичні пікселі або крапки на екрані.


Більш детальну інформацію ви можете відвідати

Посібник для розробників Android> Розмір
Посібник для розробників Android> Екрани


29

Розмір екрану в Android згруповані за категоріями ldpi, mdpi, hdpi, xhdpi, xxhdpiі xxxhdpi. Щільність екрана - це кількість пікселів у межах (як дюйм) екрана. Зазвичай він вимірюється в точках на дюйм ( dpi).

PX(Pixels):

  • наш звичайний стандартний піксель, який відображається на піксельному екрані. pxпризначений для абсолютних пікселів. Це використовується, якщо ви хочете дати абсолютні пікселі за шириною або висотою. Не рекомендовано.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp. У попередніх версіях Android використовувався dip, а пізніше змінювався на dp. Це альтернатива px.

  • Як правило, ми ніколи не використовуємо, pxоскільки це абсолютна цінність. Якщо ви використовуєте pxдля встановлення ширини чи висоти, і якщо ця програма завантажується на різні пристрої розміру екрана, цей вид не буде розтягуватися відповідно до оригінального розміру екрана.

  • dpнастійно рекомендується використовувати замість px. Використовуйте, dpякщо ви хочете відзначити ширину та висоту, щоб динамічно зростати та зменшуватися залежно від розмірів екрана.

  • якщо ми дамо dp/dip, android автоматично обчислить розмір пікселів на основі екрана розміром 160 пікселів.

SP(Scale independent pixels):

  • масштабується на основі переваг розміру шрифту користувача. Шрифти повинні використовувати sp.

  • коли згадуєте розміри шрифту для відповідності різного розміру екрана, використовуйте sp. Це схоже на. dpВикористовуйте spспеціально для того, щоб розміри шрифтів динамічно зростали та скорочувалися залежно від розмірів екрана

Документація для Android говорить:

вказуючи розміри, завжди використовуйте dpабо spодиниці. A dp- незалежний від щільності піксель, який відповідає фізичному розміру пікселя в 160 dpi. Один spі той же базовий пристрій, але масштабується відповідно до бажаного розміру тексту користувача (це піксель, незалежний від масштабу), тому вам слід використовувати цю одиницю вимірювання, визначаючи розмір тексту.


21

Екран мобільного телефону складається з тисяч крихітних точок, відомих як пікселі (px) . Піксель - це найменший елемент, який спрямовується на створення картини. Чим більше число пікселів для створення зображення або формулювання, тим чіткіше воно стає і робить екран смартфона легше читабельним.

Роздільна здатність екрана вимірюється у кількості пікселів на екрані. Роздільна здатність екрана є загальноприйнятою специфікацією при купівлі пристрою, але насправді це не так корисно при розробці для Android, оскільки мислення екранів з точки зору пікселів ігнорує поняття фізичного розміру, яке для сенсорного пристрою дійсно важливо.

Незалежний піксель від щільності (dp або dip) дозволяє дизайнеру створювати активи, які відображаються очікуваним чином, незалежно від роздільної здатності та щільності цільового пристрою.

Незалежний піксель від густини (dp або dip) дорівнює одному пікселю при базовій щільності або 160 dpi (крапки в дюймі).

1 px / 1dp = 160 dpi / 160 dpi

2 px / 1dp = 320 dpi (2x) / 160 dpi

де,

dpi - крапки на дюйм

Так, при 320 dpi 1 dp дорівнює 2 px.

Формула

px / dp = dpi / 160dpi

Точки на дюйм (dpi) - це міра різкості (тобто щільності освітлених точок) на екрані дисплея. Точки на дюйм для заданої роздільної здатності зображення відрізнятимуться від загального розміру екрана, оскільки однакова кількість пікселів розкидається по іншому простору.

Робота з незалежними пікселями щільності допомагає нам вирішити таку ситуацію, як, якщо у вас є два пристрої з однаковою роздільною здатністю пікселів, але різною кількістю місця. Припустимо, у випадку, що планшет і телефон мають однакову роздільну здатність пікселів 1280 на 800 пікселів (160 dpi) і 800 на 1280 пікселів (320 dpi) відповідно.

Тепер, оскільки планшет знаходиться на базовій щільності (160 dpi), його розміри незалежних від фізичної та щільності пікселів однакові, 1280 на 800. Телефон з іншого боку має більшу щільність пікселів, тому він має вдвічі меншу кількість незалежних пікселів щільності, ніж фізичний пікселів. Таким чином, телефон має незалежні пікселі щільністю 400 на 640. Тож використання пікселя, незалежного від щільності, полегшує подумки уявити, що планшет має набагато більше місця, ніж телефон.

Так само, якщо у вас є два пристрої з однаковим розміром екрана, але різною щільністю пікселів, скажімо, один - 800 на 1280 пікселів (320 dpi), а інший - 400 на 640 пікселів (160 dpi), нам не потрібно визначати повністю різні схеми для цих двох пристроїв, оскільки ми можемо виміряти активи з точки зору щільності незалежного пікселя, яка однакова для обох пристроїв.

800 на 1280 пікселів (320dpi) = незалежний піксель щільності 400 на 640 (dp)

400 на 640 пікселів (160 dpi) = незалежний піксель щільності 400 на 640 (dp)

Масштабування незалежних пікселів (sp) є кращою одиницею для розміру шрифту. Для цілей доступності Android дозволяє користувачам налаштовувати розмір шрифту свого пристрою. Користувачі, які мають проблеми з читанням тексту, можуть збільшити розмір шрифту свого пристрою. Зазвичай цей параметр можна знайти в налаштуваннях дисплея на телефоні чи планшеті під розмір шрифту. Це часто також доступне через налаштування доступності.

З незалежними від масштабу пікселями 16 sp точно точно такі, як 16 dp, коли розмір шрифту пристрою є нормальним або 100%. Але коли розмір шрифту пристрою великий, наприклад 125%, 16 сп переводиться на 20 дп або 1,25 рази на 16.

Якщо ви використовуєте dp як одиницю розміру шрифту, то цей фрагмент тексту має певний фізичний розмір, незалежно від того, чи користувач налаштував розмір шрифту пристрою. Використання підрозділів sp сприятиме кращому досвіду для людей із порушенням зору.

Довідка : Udacity , Google


19

sp: незалежний від пікселя масштаб

Ви повинні використовувати його з текстами, оскільки він автоматично масштабується відповідно до розміру шрифту, який користувач використовує на своєму пристрої.

px: піксель або елемент зображення - єдина точка на екрані


19

Щільність пікселів

Щільність пікселя та роздільна здатність екрана змінюються залежно від платформи. Незалежні від пристрою пікселі та масштабовані пікселі - це одиниці, які забезпечують гнучкий спосіб розміщення дизайну на різних платформах.

Обчислення щільності пікселів

Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів. Екрани високої щільності мають більше пікселів на дюйм, ніж екрани низької щільності ....

Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів. Екрани високої щільності мають більше пікселів на дюйм, ніж екрани з низькою щільністю. В результаті елементи інтерфейсу з однаковими розмірами пікселів виявляються більшими на екранах низької щільності, а меншими - на екранах з високою щільністю.

Для обчислення щільності екрана можна використовувати це рівняння:

Щільність екрану = Ширина екрана (або висота) у пікселях / Ширина екрана (або висота) в дюймах

Відображення висоти та меншої щільності

Незалежність щільності

Щільність пікселя та роздільна здатність екрана змінюються залежно від платформи. Незалежні від пристрою пікселі та масштабовані пікселі - це одиниці, які забезпечують гнучкий спосіб розміщення дизайну на різних платформах.

Обчислення щільності пікселів Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів . Екрани високої щільності мають більше пікселів на дюйм, ніж екрани низької щільності ....

Незалежність щільності відноситься до рівномірного відображення елементів інтерфейсу на екранах з різною щільністю.

Незалежні від щільності пікселі , записані у форматі dp (вимовляється " крапки "), - це гнучкі одиниці, які масштабують, щоб мати однакові розміри на будь-якому екрані. Користувацькі інтерфейси використовують пікселі, незалежні від щільності, для послідовного відображення елементів на екранах з різною щільністю.

  1. Екран низької щільності відображається з незалежністю щільності
  2. Екран високої щільності відображається з незалежністю щільності

Прочитайте повний текст https://material.io/design/layout/pixel-density.html


16

Пікселі (px) - відповідають фактичним пікселям на екрані. Це використовується, якщо ви хочете дати абсолютні пікселі за шириною або висотою.

Пікселі, незалежні від щільності (dp або dip) - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp - це один піксель на екрані 160 dpi. Співвідношення dp-пікселя змінюватиметься із щільністю екрана, але не обов'язково в прямому співвідношенні. Примітка: Компілятор приймає і "dip", і "dp", хоча "dp" більше відповідає "sp".

Незалежні від масштабування пікселі (sp) - це подібно до одиниці dp, але вона також масштабується відповідно до розміру шрифту користувача. Рекомендується використовувати цей пристрій, визначаючи розміри шрифту, щоб вони були відрегульовані як за щільністю екрану, так і за налаштуваннями користувача.

Завжди використовуйте лише dp та sp. sp для розмірів шрифту та dp для всього іншого. Це зробить інтерфейс користувача сумісним для пристроїв Android з різною щільністю. Ви можете дізнатися більше про пікселі та dp за адресою https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-

URL-адреса джерела: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/


15

Я хочу надати простий спосіб зрозуміти dp. Насправді, я думаю, dpце найлегше зрозуміти. dp- це лише фізична одиниця довжини. Це той самий вимір, як mmі inch. Це просто зручно для нас , щоб писати 50dp, 60dpа не 50/160 inchчи 60/160 inch, тому що один dpтільки 1/160 inchнезалежно від розміру екрану або дозвіл.

Єдина проблема полягає в тому, що андроїд-dpi деяких екранів не є точним. Наприклад, екран, віднесений до 160dpi, може мати дійсно 170dpi. Отже результат обчислення dpнечіткий. Він повинен бути приблизно таким же, як 1/160 inch.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.