Android ölçü birimleri arasındaki fark nedir?
- px
- daldırma
- dp
- sp
Android ölçü birimleri arasındaki fark nedir?
Yanıtlar:
Gönderen Android Geliştirici Belgeleri :
px
Piksel - ekrandaki gerçek piksellere karşılık gelir.
içinde
inç - Ekranın fiziksel boyutuna göre.
1 İnç = 2.54 santimetre
mm
Milimetre - ekranın fiziksel boyutuna göre.
pt
Puanlar - Ekranın fiziksel boyutuna göre bir inçin 1 / 72'si.
dp veya dip
Yoğunluk- bağımsız Pikseller - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160 dpi ekrana göredir, bu nedenle bir dp 160 dpi ekranda bir pikseldir. Dp-piksel oranı ekran yoğunluğu ile değişecektir, ancak doğrudan orantılı olması gerekmeyecektir. Not: "dp", "sp" ile daha tutarlı olsa da derleyici hem "dip" hem de "dp" yi kabul eder.
sp
Ölçek bağımsız Piksel - bu dp birimi gibidir, ancak kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir. Yazı tipi boyutlarını belirtirken bu birimi kullanmanız önerilir, böylece hem ekran yoğunluğu hem de kullanıcının tercihi için ayarlanırlar.
Gönderen anlama Yoğunluk Kurtuluş 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 | | | |
+---------+-------------+---------------+-------------+--------------------+
Daha fazla bilgi Google Tasarım Dokümanları'nda da bulunabilir .
dp
sahip değildir . (Her ne kadar yakın olsa da.) @ Fraggle'ın kovalama hakkındaki yorumuna bakın. Bunun anlamı, 48dp'nin yaklaşık 8mm (0.3 inç) olacağı, ancak 11 mm'ye kadar değişebileceğidir.
Bununla ilgili hemen hemen her şey ve farklı boyutlarda ve yoğunluklarda birden fazla 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 açısından, Android tüm gerçek ekran boyutlarını dört genel boyuta gruplandırır: küçük, normal, büyük ve çok büyük.Ekran yoğunluğu Ekranın
fiziksel bir alanındaki piksel sayısı; genellikle dpi (inç başına nokta sayısı) olarak adlandırılır. Örneğin, "düşük" yoğunluklu bir ekran, belirli bir fiziksel alanda "normal" veya "yüksek" yoğunluklu bir ekranla karşılaştırıldığında daha az piksele sahiptir. Basitlik için, Android tüm gerçek ekran yoğunluklarını altı genel yoğunluğa ayırır: düşük, orta, yüksek, ekstra yüksek, ekstra ekstra ekstra yüksek ve ekstra ekstra ekstra ekstra yüksek.Yönlendirme
Ekranın kullanıcının bakış açısından yönü. Bu, yatay veya dikeydir, yani ekranın en boy oranının sırasıyla geniş veya uzun olduğu anlamına gelir. Varsayılan olarak yalnızca farklı cihazların farklı yönlerde çalıştığını değil, aynı zamanda kullanıcı cihazı döndürdüğünde yönün çalışma zamanında değişebileceğini unutmayın.Çözünürlük
Ekrandaki toplam fiziksel piksel sayısı. Birden çok ekran için destek eklerken, uygulamalar doğrudan çözünürlükle çalışmaz; uygulamalar, genelleştirilmiş boyut ve yoğunluk gruplarında belirtildiği gibi sadece ekran boyutu ve yoğunluğu ile ilgilenmelidir.Yoğunluktan bağımsız piksel (dp)
Düzen boyutlarını veya konumunu yoğunluktan bağımsız bir şekilde ifade etmek için UI düzenini tanımlarken kullanmanız gereken sanal piksel birimi. Yoğunluktan bağımsız piksel, 160 dpi ekranda bir fiziksel piksele eşdeğerdir; bu, sistem tarafından "orta" yoğunluk ekranı için varsayılan temel yoğunluktur. Çalışma zamanında, sistem, kullanılan ekranın gerçek yoğunluğuna bağlı olarak, gerekirse dp birimlerinin herhangi bir ölçeklendirmesini şeffaf bir şekilde işler. Ekran piksellere dp birimlerinin dönüşüm basittir:px = dp * (dpi / 160)
. Örneğin, 240 dpi ekranda, 1 dp 1,5 fiziksel piksele eşittir. Farklı yoğunluklara sahip ekranlarda kullanıcı arayüzünüzün düzgün bir şekilde görüntülenmesini sağlamak için uygulamanızın kullanıcı arayüzünü tanımlarken her zaman dp birimleri kullanmalısınız.
Birden fazla cihaz türü için bir Android uygulaması geliştirme konusunda ciddi iseniz, ekranlar destek geliştirme belgesini en az bir kez okumalısınız. Buna ek olarak, belirli bir ekran yapılandırmasına sahip gerçek aktif cihaz sayısını bilmek her zaman iyi bir şeydir.
Ben dp tam olarak px dönüştürmek nasıl daha ayrıntılı olacaktır:
150 x 150 px
görüntü 150 * 150 dp
ekran alanı kaplayacaktır.150 x 150 px
görüntü 100 * 100 dp
ekran alanını kaplar.150x150 px
görüntü 75 * 75 dp
ekran alanını kaplar.Diğer bir yol: uygulamanıza bir görüntü eklemek istiyorsunuz ve bir 100 * 100 dp
kontrolü doldurmak için buna ihtiyacınız var . Desteklenen ekran boyutları için farklı boyutta görüntüler oluşturmanız gerekir:
100 * 100 px
mdpi için resim150 * 150 px
hdpi için görüntü200 * 200 px
xhdpi için resimpx - Piksel - ölçek başına nokta ekrandaki gerçek piksellere karşılık gelir.
i - İnç - ekranın fiziksel boyutuna göre.
mm - Milimetre - ekranın fiziksel boyutuna göre.
pt - Puanlar - Ekranın fiziksel boyutuna bağlı olarak bir inçin 1 / 72'si.
dp - Yoğunluktan bağımsız Pikseller - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160 dpi ekrana göredir, bu yüzden biri 160 dpi ekranda dp
bir pikseldir. Dp-piksel oranı ekran yoğunluğu ile değişecektir, ancak doğrudan orantılı olması gerekmeyecektir. Not: Derleyici her ikisini de kabul eder dip
ve dp
yine dp
de daha tutarlıdır sp
.
sp - Ölçekten Bağımsız Pikseller - bu dp
birime benzer, ancak kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir. Yazı tipi boyutlarını belirtirken bu birimi kullanmanız önerilir, böylece hem ekran yoğunluğu hem de kullanıcının tercihi için ayarlanır.
Aynı boyutta ancak biri 160 dpi (inç başına nokta, yani inç başına piksel) ekran yoğunluğuna sahip ve diğeri 240 dpi olan iki ekran örneğini ele alalım.
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
Ayrıca, 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 açısından, Android tüm gerçek ekran boyutlarını dört genel boyutta gruplandırır: küçük, normal, büyük ve çok büyük.
Ekran yoğunluğu:
Ekranın fiziksel bir alanındaki piksel sayısı; genellikle dpi (inç başına nokta sayısı) olarak adlandırılır. Örneğin, "düşük" yoğunluklu bir ekran, belirli bir fiziksel alanda "normal" veya "yüksek" yoğunluklu bir ekranla karşılaştırıldığında daha az piksele sahiptir. Basitlik açısından, Android tüm gerçek ekran yoğunluklarını dört genel yoğunluğa ayırır: düşük, orta, yüksek ve ekstra yüksek.
Oryantasyon:
Ekranın kullanıcının bakış açısından yönlendirilmesi. Bu, yatay veya dikeydir, yani ekranın en boy oranının sırasıyla geniş veya uzun olduğu anlamına gelir. Varsayılan olarak yalnızca farklı cihazların farklı yönlerde çalıştığını değil, aynı zamanda kullanıcı cihazı döndürdüğünde yönün çalışma zamanında değişebileceğini unutmayın.
Çözüm:
Ekrandaki toplam fiziksel piksel sayısı. Birden çok ekran için destek eklerken, uygulamalar doğrudan çözünürlükle çalışmaz; uygulamalar, genelleştirilmiş boyut ve yoğunluk gruplarında belirtildiği gibi sadece ekran boyutu ve yoğunluğu ile ilgilenmelidir.
Yoğunluktan bağımsız piksel (dp):
Düzen boyutlarını veya konumunu yoğunluktan bağımsız bir şekilde ifade etmek için UI düzenini tanımlarken kullanmanız gereken sanal piksel birimi. Yoğunluktan bağımsız piksel, 160 dpi ekranda bir fiziksel piksele eşdeğerdir; bu, sistem tarafından "orta" yoğunluk ekranı için varsayılan temel yoğunluktur. Çalışma zamanında, sistem, kullanılan ekranın gerçek yoğunluğuna bağlı olarak, gerekirse dp birimlerinin herhangi bir ölçeklendirmesini şeffaf bir şekilde işler. Dp birimlerinin ekran piksellerine dönüştürülmesi basittir: px = dp * (dpi / 160). Örneğin, 240 dpi ekranda, 1 dp 1,5 fiziksel piksele eşittir. Farklı yoğunluklara sahip ekranlarda kullanıcı arayüzünüzün düzgün bir şekilde görüntülenmesini sağlamak için uygulamanızın kullanıcı arayüzünü tanımlarken her zaman dp birimleri kullanmalısınız.
Referans: Android geliştiricileri sitesi
dp
olduğunu dip
. Her şey için kullanın (kenar boşluğu, dolgu vb.).
Kullanım sp
için {metin boyutu} sadece.
Arasındaki farkı görün px
, dp
ve sp
farklı ekran boyutlarına.
px veya dot, fiziksel ekrandaki bir pikseldir .
dpi fiziksel ekranda inç başına pikseldir ve ekranın yoğunluğunu temsil eder.
Android, çeşitli yoğunluklara takma adlar veriyor
daldırma veya dp yoğunluktan bağımsız piksellerdir , yani fiziksel yoğunluğa bağlı olarak az çok piksele karşılık gelirler.
sp veya sip , ölçekden bağımsız bir pikseldir . Büyük Metin seçeneği açıldığında ölçeklendirilir Settings>Accessibility
Metin boyutu için sp kullanın .
Diğer her şey için dp kullanın .
Kaynak 3 : (kaynak 3'teki veriler aşağıda verilmiştir)
Bunlar XML'de tanımlanan boyut değerleridir. Bir boyut, bir sayı ve ardından bir ölçü birimi ile belirtilir. Örneğin: 10px, 2in, 5sp. Aşağıdaki ölçü birimleri Android tarafından desteklenmektedir:
dp
Yoğunluktan Bağımsız Pikseller - Ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler, 1dp'nin kabaca 1px'e eşit olduğu 160 dpi (inç başına nokta sayısı) ekrana göredir. Daha yüksek yoğunluklu bir ekranda çalışırken, 1dp çizmek için kullanılan piksel sayısı, ekranın dpi'sine uygun bir faktör kadar büyütülür. Benzer şekilde, daha düşük yoğunluklu bir ekrandayken, 1dp için kullanılan piksel sayısı azaltılır. Dp-piksel oranı ekran yoğunluğu ile değişecektir, ancak doğrudan orantılı olması gerekmeyecektir. Dp birimlerini kullanmak (piksel birimleri yerine), mizanpajınızdaki görünüm boyutlarının farklı ekran yoğunlukları için düzgün bir şekilde yeniden boyutlandırılması için basit bir çözümdür. Başka bir deyişle, kullanıcı arayüzü öğelerinizin farklı cihazlardaki gerçek dünya boyutlarına tutarlılık sağlar.
sp
Ölçekten Bağımsız Piksel - Bu dp birimi gibidir, ancak kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir. Yazı tipi boyutlarını belirtirken bu birimi kullanmanız önerilir, böylece hem ekran yoğunluğu hem de kullanıcının tercihi için ayarlanır.
nk
Puanlar - Ekranın fiziksel boyutuna göre bir inçin 1 / 72'si.
px
Pikseller - Ekrandaki gerçek piksellere karşılık gelir. Bu ölçü birimi önerilmez çünkü gerçek gösterim cihazlar arasında değişiklik gösterebilir; her cihaz inç başına farklı sayıda piksele sahip olabilir ve ekranda daha fazla veya daha az toplam piksele sahip olabilir.
aa
Milimetre - Ekranın fiziksel boyutuna göre.
içinde
İnç - Ekranın fiziksel boyutuna göre.
Not: Boyut, name özniteliğinde (XML dosyasının adı değil) sağlanan değer kullanılarak başvurulan basit bir kaynaktır. Bu nedenle, boyut kaynaklarını bir XML dosyasında tek bir öğe altında diğer basit kaynaklarla birleştirebilirsiniz.
Temel olarak pikselin uygulandığı tek zaman bir pikseldir ve ekranda bir bölücü durumunda olduğu gibi tam olarak bir piksel istiyorsanız:
> 160 dpi'de 2-3 piksel elde edebilirsiniz,
> 120 dpi'de 0'a yuvarlar.
px
Pikseller - ekrandaki gerçek piksellere karşılık gelir.
dp veya daldırma
Yoğunluktan bağımsız Pikseller - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160 dpi ekrana göredir, bu nedenle bir dp 160 dpi ekranda bir pikseldir.
Dp kullanımı:
Yoğunluk bağımsızlığı - Uygulamanız, farklı yoğunluklara sahip ekranlarda görüntülendiğinde kullanıcı arabirimi öğelerinin fiziksel boyutunu (kullanıcının bakış açısından) koruduğunda “yoğunluk bağımsızlığı” elde eder. (ie) Görüntü farklı ekran türlerinde aynı boyutta (büyütülmüş veya küçültülmemiş) görünmelidir.
sp
Ölçekten bağımsız Pikseller - bu dp birimi gibidir, ancak kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Düzen boyutlarını veya konumunu yoğunluktan bağımsız bir şekilde ifade etmek için UI düzenini tanımlarken kullanmanız gereken sanal piksel birimi. Yukarıda tarif edildiği gibi, yoğunluktan bağımsız piksel, 160 dpi'lık bir ekranda bir fiziksel piksele eşdeğerdir; bu, sistem tarafından bir "orta" yoğunluklu elek için varsayılan temel yoğunluktur. Çalışma zamanında, sistem, kullanılan ekranın gerçek yoğunluğuna bağlı olarak, gerekirse dp birimlerinin herhangi bir ölçeklendirmesini şeffaf bir şekilde işler. Dp birimlerinin ekran piksellerine dönüştürülmesi basittir:
px = dp * (dpi / 160).
Örneğin, 240 dpi ekranda, 1 dp 1,5 fiziksel piksele eşittir. Farklı yoğunluklara sahip ekranlarda kullanıcı arayüzünüzün düzgün bir şekilde görüntülenmesini sağlamak için uygulamanızın kullanıcı arayüzünü tanımlarken her zaman dp birimleri kullanmalısınız.
Pikselden dp'ye ve bunun tersini anlamak çok önemlidir (özellikle yaratıcı ekibe kesin dp değerleri vermek için)
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
Yukarıda açıklanmıştır. Düzen dosyalarında kaçınmaya çalışın. Ancak, pikselin gerekli olduğu bazı durumlar vardır. örneğin, ListView ayırıcı satırı. px, tüm ekran çözünürlükleri için ayırıcı olarak bir piksel çizgisi vermek için burada daha iyidir.
Yazı tipi boyutları için sp kullanın. Ardından, aygıt yazı tipi boyutu değiştiğinde (uygulama, Görüntü -> Aygıttaki Yazı Tipleri) yalnızca uygulamanın içindeki yazı tipi değişecektir. Uygulamanın içinde statik boyutlu bir yazı tipi tutmak istiyorsanız, yazı tipi boyutunu dp olarak verebilirsiniz. Böyle bir durumda asla değişmeyecek. Geliştiriciler, bazı belirli ekranlar için böyle bir gereksinim alabilirler, bunun için geliştiriciler sp yerine dp kullanabilirler. Diğer tüm durumlarda sp önerilir.
Aşağıdaki resim arasındaki px
ve dp
aşağıdaki resim arasındaki farkı görebilirsiniz ve ayrıca farklı ekranlarda aynı fiziksel boyutları garanti edemediğini px
ve dp
sağlayamadığını da görebilirsiniz .
Metin ve görünüm boyutu ile ilgili her şey sp
veya kullanmalıdır pt
. Oysa kontrollerin boyutu, düzenleri vb. İle ilgili her şey kullanılmalıdır dp
.
Her iki kullanabilir dp
ve dip
onun yerlerde.
Ben sadece dp kullanırdım.
Yazı tipi boyutları için "sp" kullanmakla ilgili çok fazla konuşma var ve bu noktayı takdir ederken, tasarım açısından yapılacak doğru şey olduğunu düşünmüyorum. Kullanıcının bazı sakat yazı tipi boyutu seçimi varsa tasarımınızı kırabilir ve kullanıcı kendi yaşam seçimlerini değil , uygulamayı suçlar.
Ayrıca, 160 dpi'lik bir tablette bir sp-font uygulaması alırsanız, her şeyin ölçeklendiğini göreceksiniz ... ancak yazı tipiniz, karşılaştırıldığında küçük görünecek. İyi bir görünüm değil.
"Sp" yazı tipleri fikri iyi bir kalbe sahip olsa da, kötü bir fikirdir. Her şey için dp ile sopa.
sp
bir faktör olduğunu biliyorsunuz , değil mi? Etkileyen her şey dp
de etkileyecektir sp
. Bununla birlikte, mizanpajınız çok dar ve daha büyük boyutlar dp
yerine yazı tipi boyutlarını belirtmek yine de tercih edilir sp
- kullanıcının tamamen dağınık bir düzenden istediklerinden daha küçük metinlere sahip olmak daha iyidir. Ancak ilk etapta her zaman kullanıcının yazı tipi boyutu tercihine saygı göstermeye çalışmalısınız - en büyük ayar bile bu kadar büyük değildir.
sp = ölçek bağımsız piksel
dp = dip = yoğunluktan bağımsız pikseller
dpi = inç başına nokta
Sp kullanmaktan kaçınmalıyız .
Birden çok ekranı desteklemek için dp kullanmalıyız .
Android farklı ekran çözünürlüklerini destekler
120 dp ldpi aygıtında 1 inç boyutunda 120 piksel bulunur.
Diğer yoğunluklar için de aynısı ...
Yazılım mühendisleri olarak şu dönüşüm formülünü kullanmalıyız:
piksel = dp * (yoğunluk / 160)
240 dpi cihazının 1 dp değeri = 1 * (240/160) = 3/2 = 1,5 piksel olacaktır.
480 dpi cihazının 1 dp değeri = 1 * (480/160) = 3 piksel olacaktır.
Bu 1.5 ve 3 piksel bilgisini kullanarak, bir yazılım mühendisi farklı yoğunluklara yönelik düzenler tasarlayabilir.
Herhangi bir cihazın ekran parametrelerini kontrol etmek için:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
Arasındaki fark dp
ve sp
"olarak belirtilen birimler kullanıcının yazı tipi boyutu tercihi resmi belgelere kopyalanan cevapları tarafından" değiştirerek çalışma zamanında görülebilir Settings->Accessibility->Large Text
seçeneği.
Large Text
seçeneği metni 1.3
zamandan daha büyük hale getirir.
private static final float LARGE_FONT_SCALE = 1.3f;
Bu elbette satıcılara bağımlı olabilir, çünkü paketler / uygulamalar / Ayarlar'da yatar .
dpi -
piksel - piksel
pt - puanlar
inç cinsinden - fiziksel ekran boyutuna göre (1 inç = 2,54 cm).
mm-milimetre - fiziksel ekran boyutuna göre.
sp - ölçek bağımsız piksel.
daldırma -
Standart olarak dp ve sp kullanılır. yazı tipi boyutu için sp ve diğer her şey için dp.
Birimlerin dönüştürülmesi için formül:
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
İşte Android tarafından kullanılan formül:
px = dp * (dpi / 160)
Burada dpi, aşağıdaki ekran yoğunluklarından biridir. Tüm olası yoğunlukların bir listesi için buraya gidin
"DENSITY_ *" sabitlerini tanımlar.
Buradan alındı .
Bu, ekran dpi'nizi biliyorsanız, px ve dp arasında çeviri yaparken karışıklığı çözecektir.
Diyelim ki bir hdpi ekran için 60 dp görüntü istiyorsanız, 60 dp fiziksel piksel boyutu:
px = 60 * (240 / 160)
Ekran Boyutu içinde Android
kategoriler halinde gruplandırıldı small
, medium
, large
, extra large
, double-extra
ve triple-extra
. Ekran yoğunluğu, ekranın bir alanı içindeki (inç gibi) piksel miktarıdır. Genellikle inç başına nokta (dpi) olarak ölçülür. Ekran yoğunluğu düşük, orta, yüksek ve ekstra yüksek olarak gruplandırılmıştır. Çözünürlük, ekrandaki toplam piksel sayısıdır.
Birimler Arası Dönüşüm Formülü
px = dp * (dpi / 160)
cihazda dp'den piksel'e
Aşağıdaki örnek daha iyi anlamanıza yardımcı olabilir. Ölçekleme, 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) ve 640 (xxxhdpi) boyutlarına göre yapılır. Google'ın tasarım için önerilen oranı ldpi: mdpi: hdpi: xhdpi: xxhdpi için 3: 4: 6: 8: 12'dir.
150 piksel X 150 piksel boyutunda bir resim,
- 150 dp X 150 dp ekran alanı
- HDP'de 100 dp X 100 dp ekran alanı
- Xhdpi'de 75 dp X 75 dp ekran alanı
Tüm Android cihazlarda tek tip bir kullanıcı arayüzü tasarımına sahip olmak istediğinizde görüntü boyutlarınızı ve diğer boyutlarınızı düzeltmek için aşağıdaki DPI hesap makinesini kullanabilirsiniz.
/*
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);
}
}
Daha Fazla Bilgi aşağıdaki bağlantıya bakın.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
Lütfen topluluk wiki'sinin yanıtını okuyun. Aşağıda, yukarıdaki cevaplara ek olarak dikkate alınması gereken bazı bilgiler verilmiştir. Çoğu Android geliştiricisi uygulama geliştirirken bunu kaçırıyor, bu yüzden bu noktaları ekliyorum.
sp = ölçek bağımsız piksel
dp = yoğunluktan bağımsız pikseller
dpi = yoğunluk pikselleri
Yukarıdaki cevaplardan geçtim ... onları tam olarak doğru bulmuyorum. metin boyutu için sp, düzen sınırları için dp - standart. Ancak dikkatsizce kullanılırsa metin boyutu için sp düzeni bozar , cihazların çoğunda .
sp aygıtın metin boyutunu alırken, dp aygıt yoğunluğu standardınınkini alır (bir aygıtta asla değişmez) 100sp metnin, aygıtta ayarlanan yazı tipi boyutuna bağlı olarak ekranın% 80'ini veya ekranın% 100'ünü kaplayabildiğini varsayalım
Ayrıca düzen sınırları için sp kullanabilirsiniz, işe yarayacak :) Tüm metin için standart uygulama kullanımı sp yok
UX dikkate alınarak metin boyutu için sp ve dp kullanın.
Bazı insanlar daha okunabilirlik için telefonlarında büyük YAZI TİPİ boyutu kullanır, bu da küçük sabit kodlu metin vermek bir UX sorunu olacaktır. Sp'yi gerektiği yere metin koyun, ancak kullanıcı ayarlarını değiştirdiğinde mizanpajı bozmayacağından emin olun.
Benzer şekilde, tüm boyutları destekleyen tek bir uygulamanız varsa, xxxhdpi varlıklarının eklenmesi uygulama boyutunu çok artırır. Ama şimdi xxxhdpi telefonları yaygındır, bu yüzden yan çubuk, araç çubuğu ve alt çubuktaki simgeler için en azından xxxhdpi varlıklarını dahil etmeliyiz. Tüm ekran boyutları için düzgün ve daha kaliteli görüntüler elde etmek için vektör görüntülerine geçmek daha iyidir.
Kişilerin telefonlarında özel yazı tipi kullandığını da unutmayın. Bu nedenle, yazı tipinin olmaması boşluk ve diğer tüm sorunlara neden olabilir. Diyelim ki özel bir yazı tipi için metin boyutu 12sp, varsayılan yazı tipinden fazla piksel alabilir.
Android için screendensities ve temel yoğunluk detayları için google geliştirici sitesine bakın. https://developer.android.com/training/multiscreen/screendensities
Farklı ekran çözünürlükleri için Android uygulamaları kullanıcı arayüzü tasarlama hakkında iyi bir makaleyle karşılaştım ve sadece bu alanda arama yapan biri için onu burada bırakmak istiyorum. Evet, bunun Google dokümanlarında bir şekilde tanımlandığını biliyorum (ve yukarıdaki yayınlarda bahsedildi), bunu okudum ama benim için iyi değildi (evet, çok aptal olabilirim). Farklı ekran boyutlarını kullanabilen düzenlerin nasıl tasarlanacağı benim için belirsiz kaldı. Farklı ekranlar için "esnek" bir UI düzeni uygulamam gerektiğinde DP konseptinden ve benzerlerinden nefret ediyorum. (Hey iOS geliştiricileri - evet, bu doğru Storyboard konsepti).
Android'in UI kavramı kötü değil, ancak ne yazık ki iOS Storyboard özelliklerinden yoksun. Android'de esnek kullanıcı arayüzü tasarlamak kolay değildir (en iyi ihtimalle).
Farklı ekran boyutları için düzenler yapmak için Android'de ne yapacağımı anlamama yardımcı olan makale şöyle:
JMSTUDIO Blogu: - Android Uygulaması Ekran Boyutuna Karar Verin
Farklı Ekran Boyutu için Android Uygulamaları için Kullanıcı Arabirimi Nasıl Tasarlanır
Farklı ekran boyutları için bir uygulama kullanıcı arayüzü tasarlamak için, ilk tasarımımız her ekran boyutu için gereken minimum alanı karşılamalıdır. Android, her genelleştirilmiş ekran türü için minimum boyutu (dp cinsinden) tanımlar. İşte bir Android ekran boyutu kılavuzu. Ekran boyutunu dp olarak aldığımızda, Android uygulaması kullanıcı arayüzünü tasarlamak bizim için yeterli değil. Her ekran boyutu için, her yoğunluk için grafik ve bitmap görüntüler hazırlamamız gerekir. İşte bir Android ekran yoğunluğu kılavuzu.
Kolay hesaplama için, dört genel yoğunluk arasındaki 3: 4: 6: 8 ölçeklendirme oranını takip edebiliriz. Ldpi cihazı için 36 × 36 piksel bir resim oluşturursak, kalan yoğunlukların resim boyutu mdpi için 48 × 48, hdpi için 72 × 72 ve xhdpi için 96 × 96 olacaktır.
Photoshop'ta Android Uygulamaları Kullanıcı Arayüzü Nasıl Tasarlanır
Birçok tasarımcı, yoğunluktan bağımsız birim, dp nedeniyle photoshop veya diğer piksel tabanlı grafik tasarım araçlarında Android uygulaması kullanıcı arayüzü tasarlamakta sorun yaşıyor. Tasarımcılar dp'yi piksele nasıl eşleştireceklerini bilmiyorlar. Google ayrıca, dp ve piksel çevirisi için temel bir formül verse de, onlar için net bir Android UI tasarım kılavuzu vermez.
Android'in tanımı olarak, 160 dpi cihazının (mdpi) altında 1pd 1px'e eşittir. Bu nedenle, mdpi yoğunluğuna sahip xlarge Android cihazı için bir Android uygulaması tasarlamak istiyoruz, pikseldeki UI boyutumuzu 960 piksel genişlik ve 720px yükseklik olarak tanımlayabiliriz; Aynı eşleme kuralını uygulayın, Android App ekran boyutu UI tasarım yönergesini takip edebiliriz:
EKLENDİ : "Esnek" kullanıcı arayüzüyle de ilgileniyorsanız , şu kütüphaneye göz atın: Yeni boyut birimi - sdp (ölçeklenebilir dp) sağlayan bir Android SDK. Bu boyut birimi ekran boyutuyla ölçeklendirilir (bu, SDP
kitaplık hakkında bir yanıtta da belirtilmiştir )
ADDED2 Google nihayet iOS Storeboard UI kavramının kullanışlılığını anladı ve burada ConstraintLayout
Android dünyası için geçerli: ConstraintLayout ile Duyarlı bir UI oluşturun
1) dp: (density independent pixels)
Ekran çözünürlüğü arttıkça (inç başına daha fazla nokta / piksel olduğunda) bir dp biriminde temsil edilen piksel sayısı artacaktır. Tersine, daha düşük çözünürlüğe sahip cihazlarda, dp biriminde gösterilen piksel sayısı azalır. Bu göreceli bir birim olduğundan, karşılaştırılacak bir taban çizgisine sahip olması gerekir. Bu taban çizgisi 160 dpi bir ekrandır. Bu denklemdir:px = dp * (dpi / 160).
2) sp: (scale independent pixels)
Bu birim, kullanıcının yazı tipi boyutu tercihinin yanı sıra ekran dpi'sine (dp'ye benzer) göre ölçeklenir.
3) px: (pixels)
Ekrandaki gerçek pikseller veya noktalar.
Daha fazla ayrıntı için ziyaret edebilirsiniz
Android Geliştirici Kılavuzu> Boyut
Android Geliştirici Kılavuzu> Ekranlar
Ekran boyutu Android'de kategoriye ayrılır edilir ldpi
, mdpi
, hdpi
, xhdpi
, xxhdpi
ve xxxhdpi
. Ekran yoğunluğu , ekranın bir alanı içindeki (inç gibi) piksel miktarıdır. Genellikle inç başına nokta ( dpi
) cinsinden ölçülür .
PX(Pixels):
px
mutlak piksel içindir. Bu, genişlik veya yükseklik için mutlak piksel cinsinden vermek istiyorsanız kullanılır. Tavsiye edilmez.DP/DIP(Density pixels / Density independent pixels):
dip == dp
. Önceki Android sürümlerinde dip kullanıldı ve daha sonra olarak değiştirildi dp
. Bu bir alternatif px
.
Genellikle px
mutlak değer olduğu için asla kullanmayız . px
Genişliği veya yüksekliği ayarlamak için kullanıyorsanız ve bu uygulama farklı ekran boyutuna sahip cihazlara indiriliyorsa, bu görünüm ekran orijinal boyutuna göre uzatılmaz.
dp
yerine kullanılması şiddetle tavsiye edilir px
. dp
Ekran boyutlarına göre dinamik olarak büyümek ve daralmak için genişlik ve yükseklikten bahsetmek istiyorsanız kullanın .
Eğer verirsek dp/dip
, android piksel boyutunu 160 piksel boyutlu ekran temelinde otomatik olarak hesaplar.
SP(Scale independent pixels):
kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir. Yazı tipleri kullanmalıdır sp
.
çeşitli ekran boyutlarına uyacak yazı tipi boyutlarından bahsederken kullanın sp
. Bu benzer dp
yararlanabileceğinizi sp
dinamik ekran boyutlarına göre yazı tipi boyutlarının büyümesine ve küçültmek için özellikle
Android Belgeleri diyor:
boyutları belirtirken daima
dp
veyasp
birimlerini kullanın . Adp
, 160'da bir pikselin fiziksel boyutuna karşılık gelen yoğunluktan bağımsız bir pikseldirdpi
. Ansp
aynı temel birimdir, ancak kullanıcının tercih ettiği metin boyutuna göre ölçeklendirilir (ölçekden bağımsız bir pikseldir), bu nedenle metin boyutunu tanımlarken bu ölçüm birimini kullanmalısınız
Bir cep telefonunun ekranı piksel (px) olarak bilinen binlerce küçük noktadan oluşur . Bir piksel, resmi yapmaya giden en küçük öğedir. Bir resim veya ifadeyi oluşturmak için piksel sayısı arttıkça, keskinleşir ve akıllı telefon ekranını daha kolay okunabilir hale getirir.
Ekran çözünürlüğü, ekrandaki piksel sayısı olarak ölçülür. Ekran çözünürlüğü, bir cihaz satın alırken yaygın olarak kullanılan bir özelliktir, ancak ekranları piksel cinsinden düşünmek, bir dokunmatik cihaz için gerçekten önemli olan fiziksel boyut kavramını göz ardı ettiği için Android için tasarım yaparken aslında kullanışlı değildir.
Yoğunluktan bağımsız piksel (dp veya dip) , hedef cihazın çözünürlüğü veya yoğunluğu ne olursa olsun tasarımcının beklenen bir şekilde görünen varlıklar oluşturmasını sağlar.
Yoğunluktan bağımsız bir piksel (dp veya daldırma), taban yoğunluğunda bir piksele veya 160 dpi'ye (inç başına nokta) eşittir.
1 piksel / 1dp = 160 dpi / 160 dpi
2 piksel / 1dp = 320 dpi (2x) / 160 dpi
nerede,
dpi inç başına nokta
Yani, 320 dpi'de 1 dp 2 piksele eşittir.
formül
px / dp = dpi / 160dpi
İnç başına nokta (dpi), bir görüntüleme ekranındaki netliğin (yani aydınlatılan noktaların yoğunluğunun) bir ölçüsüdür. Belirli bir resim çözünürlüğü için inç başına nokta sayısı, aynı sayıda piksel farklı bir alana yayıldığından toplam ekran boyutuna göre değişir.
Yoğunluktan bağımsız piksellerle çalışmak, aynı piksel çözünürlüğüne, ancak farklı miktarda alana sahip iki cihazınızın olduğu bir durumla başa çıkmamıza yardımcı olur. Bir durumda, bir tabletin ve telefonun sırasıyla 1280 x 800 piksel (160 dpi) ve 800 x 1280 piksel (320 dpi) piksel çözünürlüğüne sahip olduğunu varsayalım.
Şimdi bir tablet temel yoğunlukta (160 dpi) olduğu için fiziksel ve yoğunluktan bağımsız piksel boyutları aynıdır, 1280 x 800. Diğer taraftan telefon daha yüksek piksel yoğunluğuna sahiptir, bu nedenle fiziksel olarak yoğunluktan bağımsız piksel sayısının yarısı kadardır piksel. Yani bir telefonda 400 x 640 yoğunluk bağımsız piksel var. Böylece yoğunluktan bağımsız bir piksel kullanmak, tabletin telefondan çok daha fazla alana sahip olduğunu zihinsel olarak resmetmeyi kolaylaştırır.
Benzer şekilde, benzer ekran boyutuna sahip ancak farklı piksel yoğunluğuna sahip iki cihazınız varsa, biri 800 x 1280 piksel (320 dpi), diğeri 400 x 640 piksel (160 dpi) ise, tam olarak tanımlamamız gerekmez varlıkları her iki cihaz için aynı olan yoğunluktan bağımsız piksel cinsinden ölçebildiğimiz için bu iki cihaz için farklı düzenler.
800 x 1280 piksel (320dpi) = 400 x 640 yoğunluktan bağımsız piksel (dp)
400 x 640 piksel (160 dpi) = 400 x 640 yoğunluktan bağımsız piksel (dp)
Ölçek bağımsız pikselleri (sp) yazı tipi boyutu için tercih edilen birimdir. Erişilebilirlik amacıyla Android, kullanıcıların cihazlarının yazı tipi boyutunu özelleştirmesine olanak tanır. Metin okumada sorun yaşayan kullanıcılar cihazlarının yazı tipi boyutunu artırabilir. Bu seçeneği normalde yazı tipi boyutunun altındaki telefonunuzdaki veya tabletinizdeki ekran ayarında bulabilirsiniz. Genellikle erişilebilirlik ayarlarından da erişilebilir.
Ölçek bağımsız piksellerde, aygıtın yazı tipi boyutu normal veya% 100 olduğunda 16 sp, 16 dp ile tamamen aynıdır. Ancak cihazın yazı tipi boyutu büyük olduğunda, örneğin% 125, 16 sp 20 dp veya 1,25 çarpı 16'ya dönüşür.
Yazı tipi boyutu için birim olarak dp kullanırsanız, kullanıcının aygıtın yazı tipi boyutunu özelleştirmesine bakılmaksızın bu metin parçasının belirli bir fiziksel boyutu vardır. Sp birimlerini kullanmak, görme bozukluğu olan insanlar için daha iyi bir deneyim sağlayacaktır.
Referans : Udacity , Google
Ekran piksel yoğunluğu ve çözünürlüğü platforma bağlı olarak değişir. Cihazdan bağımsız pikseller ve ölçeklenebilir pikseller, bir tasarımı platformlar arasında barındırmak için esnek bir yol sağlayan birimlerdir.
İnç içine sığacak piksel sayısına piksel yoğunluğu denir. Yüksek yoğunluklu ekranların inç başına düşük yoğunluklu olanlardan daha fazla pikseli vardır ....
İnç içine sığacak piksel sayısına piksel yoğunluğu denir. Yüksek yoğunluklu ekranların inç başına düşük yoğunluklu olanlardan daha fazla pikseli vardır. Sonuç olarak, aynı piksel boyutlarındaki UI öğeleri düşük yoğunluklu ekranlarda daha büyük, yüksek yoğunluklu ekranlarda daha küçük görünür.
Ekran yoğunluğunu hesaplamak için bu denklemi kullanabilirsiniz:
Ekran yoğunluğu = Ekran genişliği (veya yüksekliği) piksel / Ekran genişliği (veya yüksekliği) inç
Ekran piksel yoğunluğu ve çözünürlüğü platforma bağlı olarak değişir. Cihazdan bağımsız pikseller ve ölçeklenebilir pikseller, bir tasarımı platformlar arasında barındırmak için esnek bir yol sağlayan birimlerdir.
Piksel yoğunluk bir inç uyması piksel sayısını hesaplamak olarak adlandırılır piksel yoğunluğu . Yüksek yoğunluklu ekranların inç başına düşük yoğunluklu olanlardan daha fazla pikseli vardır ....
Yoğunluk bağımsızlığı , farklı yoğunluklara sahip ekranlarda UI öğelerinin düzgün bir şekilde gösterilmesini ifade eder.
Dp (" dips " olarak telaffuz edilir) olarak yazılan yoğunluktan bağımsız pikseller , herhangi bir ekranda aynı boyutlara sahip olacak şekilde ölçeklenen esnek birimlerdir. Malzeme kullanıcı arayüzleri, öğeleri farklı yoğunluklara sahip ekranlarda tutarlı bir şekilde görüntülemek için yoğunluktan bağımsız pikseller kullanır.
Metnin tamamını oku https://material.io/design/layout/pixel-density.html
Pikseller (piksel) - ekrandaki gerçek piksellere karşılık gelir. Bu, genişlik veya yükseklik için mutlak piksel cinsinden vermek istiyorsanız kullanılır.
Yoğunluktan bağımsız Piksel (dp veya dip) - ekranın fiziksel yoğunluğuna dayanan soyut bir birim. Bu birimler 160 dpi ekrana göredir, bu nedenle bir dp 160 dpi ekranda bir pikseldir. Dp-piksel oranı ekran yoğunluğu ile değişecektir, ancak doğrudan orantılı olması gerekmeyecektir. Not: “dp” “sp” ile daha tutarlı olsa da derleyici hem “dip” hem de “dp” yi kabul eder.
Ölçekten bağımsız Piksel (sp) - bu dp birimi gibidir, ancak kullanıcının yazı tipi boyutu tercihine göre ölçeklendirilir. Yazı tipi boyutlarını belirtirken bu birimi kullanmanız önerilir, böylece hem ekran yoğunluğu hem de kullanıcının tercihi için ayarlanır.
Her zaman yalnızca dp ve sp kullanın. yazı tipi boyutları için sp ve diğer her şey için dp. Kullanıcı arayüzünü farklı yoğunluklara sahip Android cihazlar için uyumlu hale getirecektir. Piksel ve dp hakkında daha fazla bilgiyi https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp- adresinden edinebilirsiniz.
Kaynak url: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/
Anlamak için kolay bir yol sağlamak istiyorum dp
. Aslında bence dp
anlaması en kolay olanı. dp
sadece fiziksel uzunluk birimidir. mm
Veya ile aynı boyuttadır inch
. Bize yazmak için Sadece uygun olur 50dp
, 60dp
yerine 50/160 inch
ya 60/160 inch
tek nedeni, dp
sadece bir 1/160 inch
ekran boyutu veya çözünürlüğü ne olursa olsun.
Tek sorun, bazı ekranların android dpi'sinin doğru olmamasıdır. Örneğin, 160 dpi olarak sınıflandırılan bir ekran gerçekten 170 dpi'ye sahip olabilir. Yani hesaplama sonucu dp
bulanık. Yaklaşık olarak aynı olmalıdır 1/160 inch
.