Kuo skiriasi "px", "dip", "dp" ir "sp"?

Kuo skiriasi "Android" matavimo vienetai?

  • px
  • panirti
  • dp
  • sp
Sprendimas

Iš [Android kūrėjų dokumentacijos] (http://developer.android.com/guide/topics/resources/more-resources.html#Dimension):

px Pikseliai - atitinka faktinius ekrano pikselius.

  1. in Inčai - atitinka fizinį ekrano dydį.
    1 colis = 2,54 cm

  2. mm milimetrai - pagal fizinį ekrano dydį.

  3. pt Punktai - 1/72 colio dalis pagal fizinį ekrano dydį.

  4. dp arba dip Nepriklausomi nuo tankio Pikseliai - abstraktus vienetas, pagrįstas fiziniu ekrano tankiu. Šie vienetai yra santykiniai su 160 dpi ekranui, todėl vienas dp yra vienas pikselis 160 dpi ekrane. Santykis dp ir pikselio santykis keičiasi priklausomai nuo ekrano tankio, bet nebūtinai tiesiogiai proporcingai. Pastaba: Kompilatorius priima ir "dip", ir "dp", nors "dp" labiau atitinka "sp".

  5. sp Nepriklausomi nuo mastelio pikseliai - tai kaip ir dp vienetas, tačiau jis taip pat masteliuojamas pagal naudotojo'pageidaujamą šrifto dydį. Rekomenduojama naudoti šį vienetą nurodant šrifto dydžius, kad jie būtų koreguojami atsižvelgiant į ekrano tankį ir naudotojo pageidavimus.

Iš [Understanding Density Independence In Android] (https://www.captechconsulting.com/blogs/understanding-density-independence-in-android):

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

Daugiau informacijos taip pat galima rasti Google Design Documentation.

Komentarai (11)

Beveik viskas, kas susiję su tuo ir kaip pasiekti geriausią kelių skirtingų dydžių ir tankio ekranų palaikymą, yra labai gerai aprašyta čia:

Ekrano dydis
Faktinis fizinis dydis, matuojamas kaip ekrano įstrižainė. Kad būtų paprasčiau, "Android" visus faktinius ekrano dydžius grupuoja į keturis apibendrintus dydžius: mažą, normalų, didelį ir ypač didelį.

Ekrano tankis
Pikselių skaičius fizinėje ekrano srityje. ekrane; paprastai vadinamas dpi (taškų colyje). Pvz. "mažo" tankio ekrane yra mažiau pikselių tam tikrame fiziniame plote, palyginti su "normalaus" arba "didelio" tankio ekranu. Kad būtų paprasčiau, "Android" visus faktinius ekrano tankius suskirstė į šešis apibendrintus tankį: mažą, vidutinį, didelį, labai didelį, itin didelį, itin didelį ir labai ir labai ir labai didelis.

Orientation
Ekrano orientacija iš naudotojo taško žvilgsnio. Tai yra kraštovaizdžio arba portreto padėtis, t. y. ekrano ekrano kraštinių santykis yra atitinkamai platus arba aukštas. Žinokite, kad ne skirtingi prietaisai veikia tik skirtingomis orientacijomis pagal pagal nutylėjimą, bet ir orientacija gali pasikeisti paleidimo metu, kai naudotojas pasuka prietaisą.

Rezoliucija
Bendras fizinių pikselių skaičius ekrane. Pridedant kelių ekranų palaikymą, programos daro tiesiogiai nedirba su skiriamąja geba; programos turėtų rūpintis tik su ekrano dydžiu ir tankumu, kaip nurodyta apibendrintame dydžio ir tankio grupes.

Nepriklausomas nuo tankio pikselis (dp)
Virtualus pikselio vienetas, kurį turėtumėte naudoti apibrėždami vartotojo sąsajos išdėstymą, kad išreikštumėte išdėstymo matmenis ar padėtį nuo tankio nepriklausomu būdu. Nuo tankio nepriklausomas pikselis atitinka vieną fizinį pikselį 160 dpi ekrane, kuris yra bazinis tankis, kurį sistema numato "vidutinio" tankio ekrane. Vykdymo metu sistema skaidriai tvarko bet kokį dp vienetų mastelio keitimą, jei reikia, pagal faktinį tankį naudojamame ekrane. Dp vienetų konvertavimas į ekrano pikselius yra paprastas: px = dp * (dpi / 160). Pavyzdžiui, 240 dpi ekrane 1 dp yra lygus 1,5 fizinio pikselio. Visada turėtumėte naudoti dp vienetus, kai apibrėždami savo taikomosios programos vartotojo sąsają, kad užtikrintumėte tinkamą vartotojo sąsajos rodymą skirtingo tankio ekranuose.

Jei bent kiek rimčiau ketinate kurti "Android" programėlę daugiau nei vieno tipo įrenginiui, turėtumėte bent kartą perskaityti ekranų palaikymo kūrimo dokumentą. Be to, visada pravartu žinoti tikrąjį aktyvių įrenginių, turinčių tam tikrą ekrano konfigūraciją, skaičių.

Komentarai (5)

Plačiau paaiškinsiu, kaip tiksliai dp konvertuojamas į px:

  • Jei vaizdas 150 x 150 px užima 150 * 150 dp ekrano vietos, jis veikia mdpi įrenginyje.
  • Jei veikia hdpi įrenginyje, 150 x 150 px vaizdas užims 100 * 100 dp ekrano vietos.
  • Jei veikia xhdpi įrenginyje, 150x150 px vaizdas užims 75 * 75 dp ekrano vietos.

Kitaip: tarkime, norite į programą įtraukti paveikslėlį ir reikia, kad jis užpildytų 100 * 100 dp valdiklį. Turėsite sukurti skirtingo dydžio paveikslėlius palaikomiems ekrano dydžiams:

  • 100 * 100 px paveikslėlį, skirtą mdpi
  • 150 * 150 px paveikslėlį hdpi
  • 200 * 200 px atvaizdą xhdpi
Komentarai (4)