Яка різниця між одиницями вимірювання Android?
- px
- занурити
- д.п.
- сп
Яка різниця між одиницями вимірювання Android?
Відповіді:
З Документації для розробників Android :
px
Пікселі - відповідає фактичним пікселям на екрані.
в
дюймах - виходячи з фізичного розміру екрана.
1 дюйм = 2,54 сантиметра
мм
міліметри - виходячи з фізичного розміру екрана.
pt
Бали - 1/72 дюйма на основі фізичного розміру екрана.
dp або dip
Density -незалежні пікселі - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp - це один піксель на екрані 160 dpi. Співвідношення dp-пікселя змінюватиметься із щільністю екрана, але не обов'язково в прямому співвідношенні. Примітка: Компілятор приймає і "dip", і "dp", хоча "dp" більше відповідає "sp".
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 .
dp
зовсім НЕ мають точно таку ж фізичну довжину. (Хоча це і близько.) Дивіться коментар @ Fraggle про видобуток. Це означає, що 48dp буде приблизно 8 мм (0,3 дюйма), але може змінюватися до 11 мм.
Тут дуже добре зафіксовано все, що стосується цього, і як досягти найкращої підтримки для декількох екранів різної величини та щільності:
Розмір екрана
Фактичний фізичний розмір, виміряний як діагональ екрану. Для простоти Android об'єднує всі фактичні розміри екрану на чотири узагальнені розміри: малий, звичайний, великий та надзвичайно великий.Щільність екрана
Кількість пікселів у фізичній області екрана; зазвичай називають dpi (крапки на дюйм). Наприклад, екран з "низькою" щільністю має менше пікселів у межах певної фізичної області порівняно з екраном "нормальної" або "високої" щільності. Для простоти Android групує всі фактичні щільності екрану на шість узагальнених щільностей: низька, середня, висока, надвисока, екстра-надвисока та екстра-екстра-екстра-висока.Орієнтація
Орієнтація екрана з точки зору користувача. Це або пейзаж, або портрет, тобто співвідношення сторін екрана відповідно або широке, або високе. Майте на увазі, що за замовчуванням різні пристрої працюють у різних орієнтаціях, але орієнтація може змінюватися під час виконання, коли користувач повертає пристрій.Роздільна здатність
Загальна кількість фізичних пікселів на екрані. При додаванні підтримки для декількох екранів програми не працюють безпосередньо з роздільною здатністю; програми повинні стосуватися лише розміру та щільності екрана, як це визначено узагальненими групами розмірів та щільності.Піксель, незалежний від щільності (dp)
Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Незалежний від щільності піксель еквівалентний одному фізичному пікселю на екрані 160 dpi, що є базовою щільністю, прийнятою системою для екрана "середньої" щільності. Під час виконання програма прозоро обробляє будь-яке масштабування блоків dp, якщо це необхідно, виходячи з фактичної щільності екрана, який використовується. Перетворення Dp одиниць пікселів екрану проста:px = dp * (dpi / 160)
. Наприклад, на екрані з 240 dpi 1 dp дорівнює 1,5 фізичних пікселів. Ви завжди повинні використовувати одиниці dp, визначаючи інтерфейс програми, щоб забезпечити належне відображення вашого інтерфейсу на екранах з різною щільністю.
Якщо ви серйозно ставитесь до розробки програми для Android для декількох типів пристроїв, вам слід було хоча б раз прочитати документи про підтримку екранів. Окрім цього, завжди добре знати фактичну кількість активних пристроїв, які мають певну конфігурацію екрана.
Я детальніше зупинюсь на тому, як саме dp перетворюється в px:
150 x 150 px
зображення займе 150 * 150 dp
екранний простір.150 x 150 px
зображення займе 100 * 100 dp
екранний простір.150x150 px
зображення займе 75 * 75 dp
екранний простір.Навпаки: скажіть, ви хочете додати зображення до своєї програми та вам це потрібно для заповнення елемента 100 * 100 dp
керування. Вам потрібно буде створити зображення різного розміру для підтримуваних розмірів екрана:
100 * 100 px
зображення для mdpi150 * 150 px
зображення для hdpi200 * 200 px
зображення для xhdpipx - Пікселі - точка за шкалою відповідає фактичним пікселям на екрані.
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
Крім того, ви повинні мати чітке розуміння наступних понять:
Розмір екрану:
Фактичний фізичний розмір, виміряний як діагональ екрану. Для простоти Android об'єднує всі фактичні розміри екрану на чотири узагальнені розміри: маленький, звичайний, великий та надзвичайно великий.
Щільність екрану:
Кількість пікселів у фізичній області екрану; зазвичай називають dpi (крапки на дюйм). Наприклад, екран з "низькою" щільністю має менше пікселів у межах певної фізичної області порівняно з екраном "нормальної" або "високої" щільності. Для простоти Android групує всі фактичні щільності екрану на чотири узагальнені щільності: низькі, середні, високі та надвисокі.
Орієнтація:
Орієнтація екрана з точки зору користувача. Це або пейзаж, або портрет, тобто співвідношення сторін екрана відповідно або широке, або високе. Майте на увазі, що за замовчуванням різні пристрої працюють у різних орієнтаціях, але орієнтація може змінюватися під час виконання, коли користувач повертає пристрій.
Роздільна здатність:
Загальна кількість фізичних пікселів на екрані. При додаванні підтримки для декількох екранів програми не працюють безпосередньо з роздільною здатністю; програми повинні стосуватися лише розміру та щільності екрана, як це визначено узагальненими групами розмірів та щільності.
Незалежний від щільності піксель (dp):
Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Незалежний від щільності піксель еквівалентний одному фізичному пікселю на екрані 160 dpi, що є базовою щільністю, прийнятою системою для екрана "середньої" щільності. Під час виконання програма прозоро обробляє будь-яке масштабування блоків dp, якщо це необхідно, виходячи з фактичної щільності екрана, який використовується. Перетворення одиниць dp у пікселі екрану просте: px = dp * (dpi / 160). Наприклад, на екрані з 240 dpi 1 dp дорівнює 1,5 фізичних пікселів. Ви завжди повинні використовувати одиниці dp, визначаючи інтерфейс програми, щоб забезпечити належне відображення інтерфейсу користувача на екранах різної щільності.
Довідка: Сайт розробників Android
dp
є dip
. Використовуйте його для всього (маржа, підкладка тощо).
Використовувати лише sp
для {text-size}.
Відчуваєте різницю між px
, dp
і sp
на різних розмірів екрану.
Джерело: Програмування Android: Посібник з ранчо великих рангів
px або крапка - це піксель на фізичному екрані.
dpi - пікселі на дюйм на фізичному екрані і представляють щільність відображення.
Android дає псевдоніми імена для кількох густин
dip або dp - пікселі , що не залежать від щільності, тобто вони відповідають більшій чи меншій кількості пікселів залежно від фізичної щільності.
sp або sip - піксель, незалежний від масштабу . Вони масштабуються, коли параметр " Великий текст " увімкнено в Settings>Accessibility
Використовуйте sp для розміру тексту.
Використовуйте dp для всього іншого.
Джерело 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-файлі під одним елементом.
В основному єдиний час, коли застосовується px, - це один px, і це якщо ви хочете рівно один піксель на екрані, як у випадку з дільником:
На> 160 точок на дюйм, ви можете отримати 2-3 пікселі,
На> 120 точок на дюйм, він округляється до 0.
px
Пікселі - відповідає фактичним пікселям на екрані.
dp або dip
Пікселі, незалежні від густини, - абстрактна одиниця, заснована на фізичній щільності екрана. Ці одиниці відносяться до екрана 160 dpi, тому один dp - це один піксель на екрані 160 dpi.
Використання dp:
Незалежність від щільності - Ваша програма досягає «незалежності від щільності», коли зберігає фізичний розмір (з точки зору користувача) елементів інтерфейсу користувача, коли відображається на екранах з різною щільністю. (тобто) Зображення має виглядати однакового розміру (не збільшуватись і не зменшуватися) на різних типах екранів.
сп
Пікселі, що не залежать від масштабів, - це як одиниця dp, але вона також масштабується за налаштуваннями розміру шрифту користувача.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Віртуальний піксельний блок, який слід використовувати під час визначення макета інтерфейсу, щоб виразити розміри макета або положення незалежно від щільності. Як описано вище, піксель, незалежний від щільності, еквівалентний одному фізичному пікселю на екрані 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
Це пояснено вище. Намагайтеся уникати файлів компонування. Але є деякі випадки, коли потрібен px. наприклад, рядок розділення ListView. px тут краще для надання однопіксельної лінії як дільника для всіх роздільних можливостей екрана.
Використовуйте sp для розмірів шрифту. Тоді лише шрифт всередині програми змінюватиметься, коли розмір шрифтів пристрою змінюватиметься (тобто відображати -> Шрифти на пристрої). Якщо ви хочете зберегти шрифт статичного розміру всередині програми, ви можете надати розмір шрифту в dp. У такому випадку вона ніколи не зміниться. Розробники можуть отримати таку вимогу для деяких конкретних екранів, для цього розробники можуть використовувати dp замість sp. У всіх інших випадках рекомендується використовувати sp.
Ви можете побачити різницю між малюнком px
і dp
від нього нижче, а також можна виявити, що px
та dp
не могли гарантувати однакові фізичні розміри на різних екранах.
Будь-яке, що пов'язане з розміром тексту та зовнішнім виглядом, має використовувати sp
або pt
. В той час, як все, що стосується розміру елементів керування, макетів тощо, слід використовувати dp
.
Ви можете використовувати як dp
і dip
в його місцях.
Я б використовував лише dp.
Існує багато розмов про використання "sp" для розміру шрифту, і, хоча я ціную це, я не думаю, що це правильно робити з дизайнерської точки зору. Ви можете порушити свій дизайн, якщо у користувача є якийсь вибагливий вибір розміру шрифту, і користувач зрештою звинувачує додаток , а не власний життєвий вибір.
Крім того, якщо взяти додаток sp-font на планшеті потужністю 160 dpi, ви побачите, що все збільшується вгору ... але ваш шрифт, який буде виглядати крихітним порівняно. Це не гарний вигляд.
Хоча ідея "sp" шрифтів має гарне серце, це погана ідея. Дотримуйтесь dp для всього.
sp
є фактором, правда? Все, що впливає dp
, також вплине sp
. Однак, бажано вказувати розміри шрифту dp
замість того, sp
якщо ваш макет дуже щільний, а більші розміри не підходять - краще, щоб текст був меншим, ніж те, що користувач хоче, щоб повністю заплутаний макет. Але в першу чергу ви завжди повинні прагнути дотримуватись переваг розміру шрифту користувача - навіть найбільший параметр не такий, що великий.
sp = незалежний піксель від масштабу
dp = dip = незалежні пікселі щільності
dpi = крапки на дюйм
Ми повинні уникати використання sp .
Ми повинні використовувати dp для підтримки декількох екранів.
Android підтримує різні дозволи екрана
Пристрій 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();
Різниця між dp
і sp
одиницями, зазначеними як " перевагу розміру шрифту користувача " у відповідях, скопійованих з офіційної документації, можна побачити під час виконання, змінивши Settings->Accessibility->Large Text
параметр.
Large Text
опція змушує текст 1.3
збільшуватися в рази.
private static final float LARGE_FONT_SCALE = 1.3f;
Це, звичайно, може залежати від постачальника, оскільки воно лежить у пакунках / програмах / налаштуваннях .
dpi -
px - піксель
pt - бали
дюймовий - щодо фізичного розміру екрана (1 дюйм = 2,54 см).
мм-міліметр - щодо фізичного розміру екрана.
sp - незалежний від масштабу піксель.
занурити -
У стандарті використовуються 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
Ось формула, яку використовує Android:
px = dp * (dpi / 160)
Де dpi - одна з наступних щільності екрана. Для переліку всіх можливих густин перейдіть сюди
Він визначає константи "DENSITY_ *".
Взято звідси .
Це дозволить розібратися у великій плутанині при перекладі між px та dp, якщо ви знаєте, що ваш dpi на екрані.
Скажімо, ви хочете, щоб зображення на екрані hdpi становило 60 dp, тоді розмір фізичного пікселя 60 dp становить:
px = 60 * (240 / 160)
Розмір екрану в Android
згрупована по категоріям small
, medium
, large
, extra large
, double-extra
і triple-extra
. Щільність екрана - це кількість пікселів у межах (як дюйм) екрана. Зазвичай він вимірюється в точках на дюйм (dpi). Щільність екрана групується як низька, середня, висока та надвисока. Роздільна здатність - загальна кількість пікселів на екрані.
Формула для перетворення між одиницями
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.
/*
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/
Будь ласка, прочитайте відповідь із вікі спільноти. Нижче згадуються деякі відомості, які слід враховувати на додаток до вищезазначених відповідей. Більшість розробників Android пропускають це під час розробки програм, тому я додаю ці моменти.
sp = незалежний піксель від масштабу
dp = незалежні пікселі щільності
dpi = пікселі щільності
Я пережив наведені вище відповіді ... не вважаючи їх точно правильними. sp для розміру тексту, dp для меж макета - стандарт. Але sp для розміру тексту порушить макет, якщо використовувати його необережно на більшості пристроїв.
sp приймайте текст тексту пристрою, тоді як dp приймає стандарт густини пристрою (ніколи не змінюється в пристрої). Скажімо, текст 100sp може займати 80% екрана або 100% екрана, залежно від розміру шрифту, встановленого на пристрої
Ви також можете використовувати sp для меж розташування, це буде працювати :) Немає стандартних програм для використання sp для цілого тексту
Використовуйте sp і dp для розміру тексту з урахуванням UX.
Деякі люди використовують величезний розмір FONT у своєму телефоні для більшої читабельності, надаючи їм невеликий текст у форматі твердого коду, буде проблемою UX. Покладіть текст sp для тексту, де це необхідно, але переконайтеся, що він не порушить макет, коли користувач змінить свої налаштування.
Аналогічно, якщо у вас є одна програма, яка підтримує всі параметри, додавання активів xxxhdpi значно збільшує розмір програми. Але зараз телефони xxxhdpi є загальними, тому ми повинні включати активи xxxhdpi як мінімум для піктограм у бічній панелі, панелі інструментів та нижній панелі. Краще перейти до векторних зображень, щоб мати рівномірні та якісніші зображення для всіх розмірів екрана.
Також зауважте, що користувачі користуються спеціальним шрифтом у своєму телефоні. Тож відсутність шрифту може спричинити проблеми з інтервалом і всім іншим. Скажімо, розмір тексту 12 шт для спеціального шрифту може займати деякі пікселі, крім шрифту за замовчуванням.
Зверніться до веб-сайту розробника google, щоб ознайомитися з показниками екранізації та основними відомостями щодо Android. https://developer.android.com/training/multiscreen/screendensities
Я натрапив на хорошу статтю про розробку інтерфейсу програм для Android для різних дозволів екрана, і я хотів би залишити його лише для тих, хто шукає в цій області. Так, я знаю, що це якимось чином описано в документах Google (і згадується у публікаціях вище), я читав це, але це було недобре для мене (так, я можу бути занадто дурним)). Для мене залишилося незрозумілим, як створити макети, здатні обробляти різний розмір екрана. Я ненавиджу концепцію DP тощо, коли мені потрібно реалізувати "гнучкий" макет інтерфейсу для різних екранів. (Ей, розробники iOS - так, ви праві, це концепція Storyboard).
Android не має поганої концепції інтерфейсу, але, на жаль, не вистачає функцій iOS Storyboard. Розробка гнучких інтерфейсів в Android - справа не найкраща (в кращому випадку).
Ось стаття, яка допомогла мені зрозуміти, що робити в Android, щоб робити макети для різних розмірів екрана:
Блог JMSTUDIO: - Визначте розмір екрана програми для Android
Як створити інтерфейс для додатків для Android для різного розміру екрана
Щоб розробити інтерфейс програми для різних розмірів екрана, наш початковий дизайн повинен відповідати мінімально необхідному простору для кожного розміру екрана. Android визначає мінімальний розмір (у dp) для кожного узагальненого типу екрана. Ось інструкція щодо розміру екрана Android. Коли ми отримуємо розмір екрана в dp, нам недостатньо розробити інтерфейс програми для Android. Для кожного розміру екрана нам потрібно підготувати графічні та растрові зображення для кожної щільності. Ось інструкція щодо щільності екрана Android.
Для легкого обчислення ми можемо прослідкувати коефіцієнт масштабування 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 SDK, який пропонує нову одиницю розміру - sdp (масштабований dp). Ця одиниця розміру масштабується з розміром екрана (про це також згадується у відповіді тут, проSDP
бібліотеку)
ADDED2 Google нарешті зрозумів корисність інтерфейсу інтерфейсу iOS Storeboard, і тут ідеться ConstraintLayout
про Android для світу: Створіть чуйний інтерфейс з ConstraintLayout
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> Екрани
Розмір екрану в 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
одиниці. Adp
- незалежний від щільності піксель, який відповідає фізичному розміру пікселя в 160dpi
. Одинsp
і той же базовий пристрій, але масштабується відповідно до бажаного розміру тексту користувача (це піксель, незалежний від масштабу), тому вам слід використовувати цю одиницю вимірювання, визначаючи розмір тексту.
Екран мобільного телефону складається з тисяч крихітних точок, відомих як пікселі (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
Щільність пікселя та роздільна здатність екрана змінюються залежно від платформи. Незалежні від пристрою пікселі та масштабовані пікселі - це одиниці, які забезпечують гнучкий спосіб розміщення дизайну на різних платформах.
Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів. Екрани високої щільності мають більше пікселів на дюйм, ніж екрани низької щільності ....
Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів. Екрани високої щільності мають більше пікселів на дюйм, ніж екрани з низькою щільністю. В результаті елементи інтерфейсу з однаковими розмірами пікселів виявляються більшими на екранах низької щільності, а меншими - на екранах з високою щільністю.
Для обчислення щільності екрана можна використовувати це рівняння:
Щільність екрану = Ширина екрана (або висота) у пікселях / Ширина екрана (або висота) в дюймах
Щільність пікселя та роздільна здатність екрана змінюються залежно від платформи. Незалежні від пристрою пікселі та масштабовані пікселі - це одиниці, які забезпечують гнучкий спосіб розміщення дизайну на різних платформах.
Обчислення щільності пікселів Кількість пікселів, що вміщуються в дюйм, називається щільністю пікселів . Екрани високої щільності мають більше пікселів на дюйм, ніж екрани низької щільності ....
Незалежність щільності відноситься до рівномірного відображення елементів інтерфейсу на екранах з різною щільністю.
Незалежні від щільності пікселі , записані у форматі dp (вимовляється " крапки "), - це гнучкі одиниці, які масштабують, щоб мати однакові розміри на будь-якому екрані. Користувацькі інтерфейси використовують пікселі, незалежні від щільності, для послідовного відображення елементів на екранах з різною щільністю.
Прочитайте повний текст https://material.io/design/layout/pixel-density.html
Пікселі (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/
Я хочу надати простий спосіб зрозуміти dp
. Насправді, я думаю, dp
це найлегше зрозуміти. dp
- це лише фізична одиниця довжини. Це той самий вимір, як mm
і inch
. Це просто зручно для нас , щоб писати 50dp
, 60dp
а не 50/160 inch
чи 60/160 inch
, тому що один dp
тільки 1/160 inch
незалежно від розміру екрану або дозвіл.
Єдина проблема полягає в тому, що андроїд-dpi деяких екранів не є точним. Наприклад, екран, віднесений до 160dpi, може мати дійсно 170dpi. Отже результат обчислення dp
нечіткий. Він повинен бути приблизно таким же, як 1/160 inch
.