2013-10-08 25 views
8

Tablet uygulama geliştirme konusunda yeniyim. Ekran çözünürlüğü ile Google Nexus7 yaşıyorum (600 * 960 dip) Yani bilmek istiyorum mdip kategorisine giriyor? Buna göre 1px = 1dp (taban çizgisi). Ama bunu takip edersem tablette iyi görünmüyor. Nexus7 -sw600dp için ayrı bir düzen klasörü oluşturuyorum ve mdip'e göre boyutları belirtiyorum ama çalışmıyor. Görüntülerim de iyi görünmüyor. Google nexus 7 için gerçek dönüşüm oranının ne olduğunu bilmek istiyorum. Yardım gerekiyor.Google nexus için px'den dp'ye dönüştürme 7

+1

kullanımı o yardımcı olacak bu linki: http: //www.xcubelabs.com/dpi/index.html –

cevap

13

Formül: pixels = dips * (density/160)

Nexus 7 çözünürlüğü kodu anlamına gelir, bir 213 piksel yoğunluğuna sahip 800x1280 (Eğer drawable-tvdpi adlı bir klasör sahip anlamına gelir) tvdpi olup.

Sen ile eksi pencere süslemeleri, mevcut ekran boyutu ölçebilirsiniz: Benim N7 üzerinde

this.getResources().getConfiguration().screenWidthDp; 
this.getResources().getConfiguration().screenHeightDp; 

, bu w 600 dp, 888 dp h döndürür. Yukarıdaki formülün ardından 888 dp yükseklik 1280 pikseldir - pencere dekorasyonudur.

+0

yardım için teşekkür ederim. Eğer düzeni 50px ile tanımlamak istersem o zaman eşdeğer dp 'dp = (50/213) * 160' olacak mı? – nilkash

+0

Bu doğru. Bu yardımcı olduysa, lütfen sorunu çözülmüş olarak işaretleyin. Teşekkürler! –

3

Nexus7, biraz garip bir dpi yapısı olan benzersiz bir aygıttır. Dianne Hackborn explains the unique resolution of the Nexus7

Not: uygulama bu klasörlerden yalnızca görüntüleri alır - nexus 7 Burada

layout-large-hdpi 

için

(Google'da bir Android mühendisi Dianne Hackborn itibaren) çok iyi bir açıklama Daha yüksek öncelikli niteleyiciler vermediniz. Örneğin, layout-sw360dp gibi bir düzen klasörü verdiyseniz, yukarıda söylediğim gibi ayrı düzenler vermiş olsanız bile, uygulama sadece bu klasördeki görüntüleri alacaktır. Çünkü android'de, düzenler vermeniz gereken bir öncelik sırası vardır.

Ekran Yoğunluk Yaygın dpi (inç başına nokta) olarak adlandırılır. Android, tüm gerçek ekran yoğunluklarını dört genel yoğunlukta gruplandırır: düşük (120), orta (160), yüksek (240) ve ekstra yüksek (320). Galaxy Nexus gibi bir cihaz "ekstra yüksek" ekran yoğunluğuna sahiptir (daha spesifik olarak, dpi değeri 320 olarak ayarlanmıştır). Nexus 7, "tvdpi" kullanır - yani 213 dpi.

Yoğunluk Bağımsız Piksel

Yaygın dp olarak anılacaktır. Bu, içerik görüntülendiğinde kullanılan sanal piksel birimidir. Yoğunluktan bağımsız piksel, bir 160 dpi ekranda bir fiziksel piksele eşdeğerdir.

px = dp * (dpi/160) 

veya eşdeğer: Aşağıdaki formül dp kullanımını hesaplamak için

dp = (px/dpi) * 160 

Nexus 7 benzer kararlar olmasına rağmen Galaxy Nexus daha fazla içerik gösterebilir nedeni şudur: Nexus 7'nin dpi Galaxy Nexus'dan daha düşük.

(800/213) * 160 = 600 dp 

Bu uygulamalar Galaxy Nexus üzerinde render zaman anlamına gelir

Galaxy Nexus (720 piksel genişliğinde 320 dpi)

(720/320) * 160 = 360 dp 

Nexus 7 (213 dpi, 800 piksel genişliğinde), Ekranın genişliği aslında 360 dp'dir (720 piksel kullanılarak oluşturulmuştur). Nexus 7'de ise, ekranın genişliği 600 dp'dir (800 piksel kullanılarak oluşturulur).

+0

@GrlsHu Yardımlarınız için teşekkürler. Çözümünüze göre, eğer düzeni 50px ile tanımlamak istersem o zaman eşdeğer dp 'dp = (50/213) * 160' olur? – nilkash

+0

Evet, dp hesaplaması yapılacaktır. – GrIsHu

1

Aşağıdaki kodun altında aşağıdaki kodu deneyin, aşağıdaki yönteme piksel değeri verin.

public int convertSizeToDeviceDependent(int value) { 
      DisplayMetrics dm = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(dm); 
      return ((dm.densityDpi * value)/160); 
     }