2015-06-16 121 views
0

我正在學習如何使用「最小寬度dp」在Android中使用this來支持不同的屏幕。Android中「最小寬度dp」的混淆

我知道下面的數字是dp中設備的最小邊。

爲屏幕寬度Dp典型值是:

320:在電話屏幕(240×320 LDPI,小320x480 MDPI,480x800的hdpi的,等等)。

480:像條紋(480x800 mdpi)的tweener平板電腦。

600:7「平板電腦(600x1024)。

720:10「平板電腦(720x1280,800x1280等)。

根據this後nexus 6有730 x 410 dp。

Nexus 6先擁有令人印象深刻5.96」 四HD屏幕在 分辨率的2560 X 1440(493 ppi)的顯示。這轉換爲〜730 x 410 dp (密度獨立像素)。

但作爲this

  dp = (px/dpi)*160 
       = (1440/493)*160 
       = ~467 

解釋那麼怎麼來這相當於730×410 DP? 更多當我在nexus 6中運行演示時,設備使用res/values-sw320dp/dimens.xml中定義的填充尺寸

這使我困惑。如何使用「最小寬度dp」實際計算dp並相應地創建視圖?

除res/values-sw320dp之外,我有res/value和res/values-sw600dp,它下面有dimens.xml。

UPDATE想通了我的困惑。檢查問題下的評論。

+1

檢查[這](http://stackoverflow.com/questions/16105032/confusion-with-smallest-width-600-dp-selector)...它可以幫助你 – Biplab

+0

我想通了這個。 [鏈接](http://stackoverflow.com/questions/30041594/how-does-quantized-density-affect-image-resource-selection-and-scaling)。 dp是通過量化密度而不是物理密度來計算的。因此nexus 6的730 x 410 dp是正確的。 – Ankit

+0

和sw320dp部分混淆是我的理解錯誤。使用res/values-sw320dp是因爲下一個定義的桶是res/values-sw600dp,它明顯大於410(如果連接點6爲最小側)。 – Ankit

回答

2

你可以用下面的代碼正確的價值觀:

DisplayMetrics displayMetrics = this.getResources().getDisplayMetrics(); 
    float dpHeight = displayMetrics.heightPixels/displayMetrics.density; 
    float dpWidth = displayMetrics.widthPixels/displayMetrics.density; 
    Log.d("dpHeight-----",String.valueOf(dpHeight)); 
    Log.d("dpWidth------",String.valueOf(dpWidth)); 

例如,對於的Xperia Z^1080x1920px值是 x592dp,設置爲價值觀sw360dp

+0

是的,這給出了正確的值。 DisplayMetrics.density用於縮放取決於量化密度的資源。 – Ankit