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


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

  • px
  • опускати
  • дп
  • сп

5159
2018-01-08 03:23


походження


це використання повної різниці між px, dip, dp і sp в android [ developer.android.com/guide/topics/resources/... - NagarjunaReddy
Цей чудовий конвертер демонструє його найкраще, на мою думку. Це також надзвичайно корисно для експортування спрацьовування з Photoshop або розробки макета для фізичного розміру. - Paul Lammertsma
новий опис в Google Design Одиниці вимірювання та вимірювання - Arnav M.
Різниця між DP, SP та пікселями з прикладами. - Ajit Singh
Як програмно конвертувати між px, dp, і sp - Suragch


Відповіді:


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

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

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

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

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

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

  6. сп
    МасштабНезалежні пікселі - це як одиниця 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.

Розрахувати розміри на реальному пристрої це додаток може бути використаний.


5196
2018-02-25 12:56



незважаючи на те, що вони повинні бути однаковими, у мене, як правило, є багато проблем з dp, в той час як все добре працює з падінням - DallaRosa
Одна примітка щодо db / sp не є абсолютно очевидною: масштабування, яке відбувається для них, залежить не від реальної щільності пристроїв (dpi), але на якій "ковші" щільності воно потрапляє: наявні відра: 120 160 240 402. Це може призвести до деяких проблем із обробкою екранів, які значно відрізняються, але не збігаються. - Fraggle
Зауважте, що документація більше не згадує про "занурення" взагалі, просто "dp", хоча компілятор, як і раніше, приймає "падіння". - Adam Rosenfield
@android_developer (5 коментарів вище) dp робить ні мати точно таку ж фізичну довжину. (Хоча це близько.) Див. @ Fraggle коментар щодо bucketing. Що це означає, що 48dp буде приблизно 8мм (0,3 дюйма), але може варіюватися до 11мм. - intrepidis
Причиною для bucketing є те, що розробники можуть перевіряти свої програми на кількох пристроях різної щільності та бути впевненими, що макети виглядають однаково на багатьох пристроях. Таким чином, навіть якщо фізичний розмір кнопок і т. Д. Трохи зміниться, загальний вигляд діяльності буде однаковими. - intrepidis


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

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

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

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

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

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

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


606
2017-08-02 14:15



Отже, якщо ви використовуєте dp для кнопки та sp для розміру шрифту тексту кнопки, що трапляється, коли користувач починає масштабувати? Текст збільшуватиметься, але чи зможе ця кнопка збільшити її? - Wytze
@Wytze, ні. Для речей, де відповідний текст може бути проблемою, я б просто використовувати падіння, так що речі не переповнюються. - eski
@Wytze І я, навпаки, використовую sp як для тексту, так і для будь-якого вмісту. Наприклад, якщо у мене є кнопка з фіксованим розміром і текстом всередині, я б призначив розмір кнопки в sp, щоб він також збільшувався, коли це потрібно. В іншому випадку користувачеві буде дратувати, що він збільшив розмір тексту, і він не збільшився. Звичайно, макет повинен бути достатньо гнучким, щоб це дозволити. - Malcolm
@Сам Ну, вам потрібно вирішити, що важливіше: ваш дизайн або можливість для користувачів з проблемами зору прочитати текст. - Malcolm
Якщо ваші дизайнери не залишать місця для текстових елементів, щоб масштабувати відповідно до розміру sp, одним із варіантів є перехід до будь-якого макета, який ви використовуєте для більш вузького пристрою, а потім масштабувати все рівномірно (DisplayMetrics.scaledDensity / DisplayMetrics. щільність) - John Mellor


Я докладніше розкажу про те, як точно перетворює 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 зображення для mppi
  • 150 * 150 px зображення для hdpi
  • 200 * 200 px зображення для xhdpi

280
2017-10-30 09:43



Як ми обчислимо пікселі для hdpi, ldpi, mdpi тощо. Я чув, що ми використовуємо цю формулу..px = dp * (dpi / 160); Ви можете пояснити мені цю формулу PLZ? - Rakesh patanga
@Rakeshpatanga При щільності 160 dpi, 1 px = 1 dp (фізичний піксель і абстракція dp однакові). Тобто для одного dp ми маємо (1) * (160/160) = 1, або рівно 1 px. При більш високій щільності 320 точок на дюйм одиничний д.п. становить (1) * (320/160) = 2 пікселі, а два д.п. - (2) * (320/160) = 4 пікселів. - samsara
Поставте їх у моноширину, щоб побачити: | 1dp |, | ___ | ___ | 160 | _ | _ | _ | _ | 320 (запровадити рядок після коми). | _ | = 1 ряхел. - samsara
повторно "Вам потрібно буде створити зображення різних розмірів для підтримуваних розмірів екрана:" Це залежить від. Для маленький висококонтрастний зображення, наприклад іконки, мудро створити принаймні найменший розмір (щоб бути впевненим, що це буде зрозуміло) плюс досить великий розмір (так що великі версії не виглядають розмитими). Але навіть для значків, ви можете дозволити одне зображення масштабується у діапазоні розмірів, при більш високій щільності. Для фотографій просто вказати область відображення, яку ви хочете заповнити, і покладатися на масштабування пристрою. - ToolmakerSteve


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

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

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

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

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

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

Візьмемо приклад двох екранів, однакових розмірів, однак щільність екрана становить 160 точок на дюйм (точки на дюйм, тобто пікселі на дюйм), а інша - 240 точок на дюйм.

                          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

232
2017-07-26 21:19





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

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

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

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

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

Орієнтація: 

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

Рішення:

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

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

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

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


183
2017-10-17 12:47





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

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


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


Дивіться різницю між px, dp і sp на різних екранах.

Enter image description here

Джерело: Програмування Android: Довідник з ранчо Big Nerd


168
2018-01-10 19:13



Але я не можу пропустити значення dp для setX або setY функції, android не перекладає його тут. Що я можу зробити? - Daniel Viaño


Я підрахував формулу нижче, щоб здійснити конверсії dpi до dp і sp enter image description here


118
2017-12-27 09:21



Вона повинна містити значення ppi замість dpi - Prateek


Визначення

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

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

Android дає псевдонім імен до декількох щільностей

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

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

  • 1dp = 1px на mppi

enter image description here

сп або ковток це масштабний незалежний піксель. Вони масштабні, коли Великий текст опція ввімкнена Налаштування > Доступність

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

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

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

Використовуйте дп за все інше.


107
2017-09-20 21:34





Джерело 1

Джерело 2

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

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

дп

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

сп

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

пт

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

px

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

мм

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

в

Дюйми - Виходячи з фізичного розміру екрана.

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


104
2018-04-02 06:35



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