Soru “Px”, “dip”, “dp” ve “sp” arasındaki fark nedir?


Android ölçü birimleri arasındaki fark nedir?

  • px
  • daldırma
  • dp
  • sp

5159
2018-01-08 03:23


Menşei


Bu android px, dip, dp ve sp arasında tam bir fark kullanmak [ developer.android.com/guide/topics/resources/... - NagarjunaReddy
Bu şık dönüştürücü bunu en iyi şekilde gösterir, Benim fikrimce. Ayrıca, sprite'ları Photoshop'tan dışa aktarmak veya mizanpajınızı fiziksel bir boyut için tasarlamak için son derece kullanışlıdır. - Paul Lammertsma
Google Tasarım'da yeni açıklama Birimler ve ölçümler - Arnav M.
Örneklerle DP, SP ve Piksel arasındaki fark. - Ajit Singh
Programatik olarak nasıl dönüştürülür px, dp, ve sp - Suragch


Cevaplar:


İtibaren Android Geliştirici Dokümantasyonu:

  1. px
    Piksel - Ekrandaki gerçek piksellere karşılık gelir.

  2. içinde
    İnç - ekranın fiziksel boyutuna göre.
      1 inç = 2,54 santimetre

  3. aa
    milimetre - ekranın fiziksel boyutuna göre.

  4. nk
    makas - Ekranın fiziksel boyutuna göre 1/72 inç.

  5. dp veya daldırma
    Yoğunlukbağımsız piksel - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160'a göre       dpi ekranı, böylece bir dp 160 dpi ekranda bir pikseldir. Oranı       dp-to-piksel ekran yoğunluğu ile değişecektir, ancak zorunlu olarak değil       doğru orantılı. Not: Derleyici hem "dip" hem de       "dp", "dp" olsa da "sp" ile daha tutarlıdır.

  6. sp
    ölçekbağımsız piksel - bu dp birimi gibidir, ancak aynı zamanda kullanıcının yazı tipi boyutu tercihi tarafından ölçeklendirilir. Size tavsiye edilir       yazı tipi boyutları belirlenirken bu birimi kullanın, böylece ayarlanacaktır       Hem ekran yoğunluğu hem de kullanıcının tercihi için.

itibaren Android'de Yoğunluk Bağımsızlığını Anlama:

+----------------+----------------+---------------+-------------------------------+
| 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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Daha fazla bilgi de bulunabilir Google Tasarım Dokümantasyonu.

Gerçek cihazdaki boyutları hesaplamak için bu uygulama kullanılabilir.


5196
2018-02-25 12:56



Her ne kadar her şey dürüst çalışsa da, dp ile çok fazla problem yaşama eğilimindeyim. - DallaRosa
Tamamen açık olmayan db / sp hakkında bir not: Bunlar için meydana gelen ölçekleme, gerçek yoğunluktaki (dpi) cihazlara değil, yoğunlukların içine girdiği "kova" a bağlıdır: mevcut kovalar: 120,160,240,320. Bu, önemli ölçüde farklı olan ekranların ele alınmasına bazı sorunlara neden olabilir, ancak aynı şekilde kovalanır. - Fraggle
Derlemenin hala "dip" kabul ettiği görünse de, belgelerin artık "dip" ("dp"), artık "dp" ye değinmediğini unutmayın. - Adam Rosenfield
@android_developer (5 yorum yukarıda) dp yapar değil aynı fiziksel uzunluğa sahipler. (Yakın olmasına rağmen.) @ Fraggle'ın kovalamayla ilgili yorumuna bakın. Bunun anlamı 48dp'nin kabaca 8mm (0,3 inç) olacağıdır, ancak 11 mm'ye kadar değişebilir. - intrepidis
Kovalamanın nedeni, geliştiricilerin uygulamalarını farklı yoğunluklardaki birkaç cihazda test edebilmeleri ve yerleşimlerin çok sayıda cihazda aynı görüneceğinden emin olmalarıdır. Bu yüzden, düğmelerin fiziksel boyutu biraz değişse bile, bir etkinliğin genel görünümü aynı olacaktır. - intrepidis


Bununla ilgili hemen hemen her şey ve farklı boyutlarda ve yoğunluklarda birden çok ekran için en iyi desteği nasıl elde edeceğiniz burada çok iyi belgelenmiştir:

Ekran boyutu
  Ekranın diyagonal olarak ölçülen gerçek fiziksel boyut.   Basitlik için Android, tüm gerçek ekran boyutlarını dörde böler.   genelleştirilmiş boyutlar: küçük, normal, büyük ve ekstra büyük.

Ekran yoğunluğu
    Fiziksel alandaki piksel miktarı   ekran; genellikle dpi (inç başına nokta) olarak adlandırılır. Örneğin,   "Düşük" yoğunluk ekranı belirli bir fiziksel alanda daha az piksel içeriyor,   Bir "normal" veya "yüksek" yoğunluk ekranına kıyasla. Basitlik için,   Android, tüm gerçek ekran yoğunluklarını altı genelleştirilmiş olarak gruplandırır   yoğunlukları: Düşük, orta, yüksek, ekstra-yüksek, ekstra-ekstra-yüksek ve   ekstra ekstra-ekstra yüksek.

Oryantasyon
Ekranın kullanıcının noktasından oryantasyonu   görünüm. Bu manzara ya da portre, yani ekranın anlamı   en boy oranı sırasıyla geniş veya uzun boyludur. Farkında olmamak   sadece farklı cihazlar farklı yönlerde çalışırlar   varsayılan, ancak yönlendirme kullanıcı çalışırken çalışma zamanında değişebilir   cihazı döndürür.

çözüm
 Üzerindeki toplam fiziksel piksel sayısı   ekran. Birden çok ekran için destek eklerken, uygulamalar   doğrudan çözünürlükle çalışmaz; uygulamalar söz konusu olmalı   genelleştirilmiş tarafından belirtildiği gibi sadece ekran boyutu ve yoğunluğu ile   boyut ve yoğunluk grupları.

Yoğunluktan bağımsız piksel (dp)
 Sanal   UI düzenini tanımlarken kullanmanız gereken piksel birimi, ifade etmek   Yerleşim ölçüleri veya yoğunluk bağımsız bir şekilde konum.   Yoğunluktan bağımsız piksel, 160'ın üzerindeki bir fiziksel piksele eşdeğerdir   Sistem tarafından varsayılan olarak kabul edilen temel yoğunluk olan dpi ekranı   "orta" yoğunluk ekranı. Çalışma zamanında, sistem şeffaf bir şekilde işler   Gerektiğinde, gerçek yoğunluğa bağlı olarak dp birimlerinin herhangi bir ölçeklenmesi   kullanımdaki ekranın Dp birimlerinin ekran piksellerine dönüşümü   basit:    px = dp * (dpi / 160).   Örneğin, 240 dpi ekranda 1 dp   1.5 fiziksel piksele eşittir. Her zaman dp birimlerini kullanmalısınız.   UI'nızın düzgün görüntülenmesini sağlamak için uygulamanızın kullanıcı arayüzünü tanımlayın   Farklı yoğunluklarda ekranlar.

Birden fazla cihaz türü için bir Android uygulaması geliştirme konusunda ciddi iseniz, ekran desteği geliştirme dokümanını en az bir kez okumuş olmalısınız. Buna ek olarak, belirli bir ekran konfigürasyonuna sahip aktif cihazların gerçek sayısını bilmek her zaman iyi bir şeydir.


606
2017-08-02 14:15



Düğme metninin yazı tipi boyutu için bir düğme ve sp için dp kullanırsanız, kullanıcı ölçeklemeye başladığında ne olur? Metin büyüyecek, ancak düğme de büyütülerek buna uygun mu? - Wytze
@Wytze, hayır. Metni sığdırmanın sorun olabileceği şeyler için, sadece daldırma kullanırdım, böylece işler taşmaz. - eski
@Wytze Ve ben, aksine, hem metin için hem de içerdiği her şey için sp kullanın. Örneğin, sabit boyutlu ve içinde bir metin bulunan bir düğmem varsa, düğme boyutunu sp olarak atadım, böylece gerektiğinde ölçeklendirilir. Aksi halde, kullanıcı metnin boyutunu artırdığından rahatsız olmaz ve artmadı. Tabii ki, düzen ona izin verecek kadar esnek olmalıdır. - Malcolm
@Sam Peki, neyin daha önemli olduğuna karar vermek size kalmıştır: tasarımınız veya görme problemi olan kullanıcıların metinlerinizi okuma kabiliyeti. - Malcolm
Tasarımcılarınız, sp'ye göre ölçeklendirilecek metin tabanlı öğeler için yer bırakmazsa, bir seçenek, daha dar bir cihaz için kullandığınız düzeni değiştirir, sonra da (DisplayMetrics.scaledDensity / DisplayMetrics) her şeyi aynı şekilde ölçeklendirir. yoğunluk). - John Mellor


Dp'nin px'e tam olarak nasıl dönüştüğünü daha ayrıntılı olarak açıklayacağım:

  • Bir mdpi cihazında çalışıyorsa, 150 x 150 px görüntü alacak 150 * 150 dp ekran alanı
  • Bir hdpi cihazında çalışıyorsanız, 150 x 150 px görüntü alacak 100 * 100 dp ekran alanı
  • Bir xhdpi cihazında çalışıyorsa, 150x150 px görüntü alacak 75 * 75 dp ekran alanı

Başka bir yolla: uygulamanıza bir resim eklemek istiyorsunuz ve bunu doldurmak için 100 * 100 dp kontrol. Desteklenen ekran boyutları için farklı boyutta görüntüler oluşturmanız gerekir:

  • 100 * 100 px mdpi için görüntü
  • 150 * 150 px hdpi için görüntü
  • 200 * 200 px xhdpi için görüntü

280
2017-10-30 09:43



HDpi, ldpi, mdpi vb. İçin pikselleri nasıl hesaplarız? Bu formülü kullandığımızı duydum..px = dp * (dpi / 160); Bana bu formülle plz'i açıklayabilir misin? - Rakesh patanga
@Rakeshpatanga 160 dpi yoğunluğunda, 1 px = 1 dp (fiziksel piksel ve dp soyutlaması aynıdır). Yani, tek bir dp için (1) * (160/160) = 1 veya tam olarak 1 px var. 320 dpi'lik daha yüksek yoğunlukta, tek bir dp (1) * (320/160) = 2 pikseldir ve iki dp'si (2) * (320/160) = 4 px'dir. - samsara
Bunları görmek için monospace olarak sıralayın: | 1dp |, | ___ | ___ | 160, | _ | _ | _ | _ | 320 (virgüllerden sonra satır sonlarını koy). | _ | = 1 pbenxEl. - samsara
Yeniden "Desteklenen ekran boyutları için farklı boyutta görüntüler oluşturmanız gerekecek:" Bu değişir. İçin küçük yüksek kontrastlı görüntüler, ör. Simgeler, en azından en küçük boyutu (net olacağından emin olmak için) artı oldukça büyük bir boyut yaratmak için akıllıcadır (böylece büyük sürümler bulanık görünmüyor). Ancak simgeler için bile, bir görüntünün daha yüksek yoğunluklarda bir dizi boyutta ölçeklenmesine izin verebilirsiniz. Fotoğraflar için, sadece doldurmak istediğiniz ekran alanını belirtin ve cihaz ölçeklendirmesine güvenin. - ToolmakerSteve


px Piksel - ölçek başına nokta, ekrandaki gerçek piksellere karşılık gelir.

içinde İnç - ekranın fiziksel boyutuna göre.

aa milimetre - ekranın fiziksel boyutuna göre.

nk makas - Ekranın fiziksel boyutuna göre 1/72 inç.

dp Yoğunluk - bağımsız Piksel - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160 dpi ekrana göre, yani dp 160 dpi ekranda bir pikseldir. Ekran yoğunluğu ile dp-to-piksel oranı değişecektir,  ancak doğrudan doğruya değil.  Not: Derleyici hem kabul eder dip ve dpolsa da dp daha tutarlı sp.

sp -Sale bağımsız Piksel - bu gibi dp birim,  Ancak, kullanıcının yazı tipi boyutu tercihiyle de ölçeklenir. Yazı tipi boyutları belirlerken bu birimi kullanmanız önerilir,  Böylece hem ekran yoğunluğu hem de kullanıcının tercihi için ayarlanacaklar.

Aynı boyutta olan ancak bir ekran yoğunluğu 160 dpi (inç başına nokta, yani inç başına piksel) ve diğeri 240 dpi olan iki ekran örneğini alın.

                          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





Üstelik aşağıdaki kavramlar hakkında net bir anlayışa sahip olmalısınız:

Ekran boyutu:

Ekranın diyagonal olarak ölçülen gerçek fiziksel boyut. Basitlik için, Android tüm gerçek ekran boyutlarını gruplandırır.   Genelleştirilmiş dört boyut: küçük, normal, büyük ve ekstra büyük.

Ekran yoğunluğu: 

Ekranın fiziksel alanı içindeki piksel miktarı; genellikle dpi (inç başına nokta) olarak adlandırılır. Örneğin,   "Düşük" yoğunluk ekranı belirli bir fiziksel alanda daha az piksel içeriyor,   Bir "normal" veya "yüksek" yoğunluk ekranına kıyasla. Basitlik için,   Android, tüm gerçek ekran yoğunluklarını dört genelleştirilmiş olarak gruplandırır   yoğunlukları: Düşük, orta, yüksek ve ekstra yüksek.

Oryantasyon: 

Ekranın kullanıcının bakış açısından yönlendirilmesi. Bu manzara ya da portre, yani   ekranın en boy oranı sırasıyla geniş veya uzun boyludur. Farkında olmak   sadece farklı cihazlar farklı yönlerde çalışır   varsayılan olarak, ancak yönlendirme kullanıcı zamanında çalışma zamanında değişebilir   cihazı döndürür.

Çözüm:

Ekrandaki toplam fiziksel piksel sayısı. Birden çok ekran için destek eklerken, uygulamalar doğrudan çalışmaz   çözünürlükle; uygulamalar sadece ekran ile ilgili olmalıdır   boyut ve yoğunluk, genel boyut ve yoğunluk ile belirtildiği gibi   grupları.

Yoğunluktan bağımsız piksel (dp): 

UI düzenini tanımlarken, düzen boyutlarını ifade etmek için kullanmanız gereken sanal bir piksel birimi veya   yoğunluktan bağımsız bir şekilde pozisyon. Yoğunluktan bağımsız piksel   160 dpi ekranda bir fiziksel piksele eşdeğerdir,   Bir "orta" yoğunluk ekranı için sistem tarafından varsayılan taban çizgisi yoğunluğu.   Çalışma zamanında, sistem dp'nin herhangi bir ölçeklemesini şeffaf olarak işler   Gerektiğinde, kullanımdaki ekranın gerçek yoğunluğuna bağlı olarak birimler.   Dp birimlerinin ekran piksellerine dönüşümü basit: px = dp * (dpi   / 160). Örneğin, 240 dpi ekranda 1 dp, 1,5 fiziksel değere eşittir   piksel. Tanımlarken her zaman dp birimlerini kullanmalısınız.   ekranlardaki kullanıcı arayüzünüzün düzgün görüntülenmesini sağlamak için uygulamanın kullanıcı arayüzü   farklı yoğunluklar.

Referans: Android geliştiricileri sitesi


183
2017-10-17 12:47





dp olduğu dip. Her şey için kullanın (kenar boşluğu, dolgu vb.).

kullanım sp sadece {text-size} için.


Farklı ekran yoğunluklarında aynı boyutu elde etmek için, Android bu birimleri çalışma zamanında piksellere dönüştürür, bu yüzden yapmanız gereken zor bir matematik yoktur.


Arasındaki farkı görün px, dp ve sp Farklı ekran boyutlarında.

Enter image description here

Kaynak: Android Programlama: Büyük Nerd Ranch Kılavuzu


168
2018-01-10 19:13



Ama setX veya setY fonksiyonuna dp değerini geçemiyorum, android burada çevirmiyor. Ne yapabilirim? - Daniel Viaño


Dönüşümleri yapmak için aşağıdaki formülü hesapladım dpi için dp ve sp enter image description here


118
2017-12-27 09:21



Dpi yerine ppi olmalı - Prateek


Tanımlar

px veya nokta bir piksel fiziksel ekranda.

dpi Fiziksel ekranda inç başına düşen piksellerdir ve ekranın yoğunluğunu temsil eder.

Android verir çeşitli yoğunluklara diğer adlar

  • ldpi (düşük) ~ 120dpi
  • mdpi (orta) ~ 160dpi
  • hdpi (yüksek) ~ 240dpi
    • 2015 yılında çoğu cihaz burada
  • xhdpi (ekstra yüksek) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (ekstra-ekstra-yüksek) ~ 480dpi
    • Nexus 5
  • xxxhdpi (ekstra-ekstra-ekstra-yüksek) ~ 640dpi

daldırma veya dp Hangi yoğunluk-iç içe pikselleryani, fiziksel yoğunluğa bağlı olarak daha fazla veya daha az piksele karşılık gelir.

  • 1dp = mdpi'de 1px

enter image description here

sp veya yudum bir ölçek bağımsız piksel. Onlar ne zaman ölçeklendirilir Büyük Metin seçenek açık Ayarlar > Ulaşılabilirlik

  • 1sp = 1dp
  • Erişilebilirlik Büyük Metin ile 1sp = 1.2dp

Ne kullanmalı?

kullanım sp Metin boyutu için.

kullanım dp her şey için.


107
2017-09-20 21:34





Kaynak 1

Kaynak 2

Kaynak 3: (Kaynak 3'ten veriler aşağıda verilmiştir)

Bunlar XML'de tanımlanan boyut değerleridir. Bir boyut belirtildi   bir sayı ile bir ölçü birimi. Örneğin: 10px, 2in,   5sp. Aşağıdaki ölçü birimleri Android tarafından desteklenmektedir:

dp

Yoğunluktan bağımsız Piksel - Temeli olan soyut bir birim   Ekranın fiziksel yoğunluğu. Bu birimler 160 dpi'ye göre   1dp kabaca 1px'e eşit olan (inç başına nokta) ekran. Ne zaman   Daha yüksek yoğunluklu bir ekranda çalışırken, çizim için kullanılan piksel sayısı   1dp, ekranın dpi'sine uygun bir faktör tarafından büyütülür.   Benzer şekilde, daha düşük yoğunluklu bir ekranda, kullanılan piksel sayısı   1dp için aşağı ölçeklendirilir. Dp-to-piksel oranı,   Ekran yoğunluğu, ancak mutlaka doğru orantıya değil. Dp kullanarak   birimleri (px birimleri yerine) görünümü yapmak için basit bir çözümdür   Yerleşiminizdeki boyutlar, farklı ekran için doğru şekilde yeniden boyutlandırılır   yoğunlukları. Başka bir deyişle, gerçek dünya için tutarlılık sağlar   Farklı cihazlar arasında UI öğelerinizin boyutları.

sp

Ölçek bağımsız Piksel - Bu dp birimi gibi, ama aynı zamanda   Kullanıcının yazı tipi boyutu tercihiyle ölçeklenir. Kullanmanız tavsiye edilir   Bu birim yazı tipi boyutlarını belirtirken,   Hem ekran yoğunluğu hem de kullanıcının tercihi.

nk

Noktalar - ekranın fiziksel boyutuna göre 1/72 inç.

px

Piksel - Ekrandaki gerçek piksellere karşılık gelir. Bu birim   gerçek gösterim farklı olabileceğinden ölçüm önerilmemektedir   cihazlar arasında; her cihaz başına farklı sayıda piksel olabilir   inç ve ekranda daha fazla veya daha az toplam piksel bulunabilir.

aa

Milimetre - Ekranın fiziksel boyutuna göre.

içinde

İnç - Ekranın fiziksel boyutuna göre.

Not: Boyut, name niteliğinde sağlanan değeri kullanarak başvurulan basit bir kaynaktır (XML dosyasının adı değil). Bu şekilde, boyut kaynaklarını tek bir öğenin altında bir XML dosyasındaki diğer basit kaynaklarla birleştirebilirsiniz.


104
2018-04-02 06:35



Ayrıca: bu cevabın katma değeri nedir? Başka cevaplarda daha önce bahsedilmemiş bir şey yok gibi görünüyor. - laalto


Temelde px'nin geçerli olduğu tek zaman bir px'dir ve eğer bölücüde olduğu gibi ekranda tam olarak bir piksel olmasını istiyorsanız:

> 160 dpi'de 2-3 piksel alabilirsiniz

> 120 dpi'de 0'a yuvarlanır.


96
2017-07-09 05:46



getDimensionPixelOffset aşağı yuvarlanır, getDimensionPixelSize yukarı yuvarlar. - Eugen Pechanec