2014-02-25 36 views
6

如何獲得屏幕寬度dpi?如何在ANDROID中獲取屏幕寬度dpi?

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
int f = metrics.densityDpi; 


    // getWindowManager().getDefaultDisplay().getMetrics(metrics); 

int width = metrics.widthPixels; 
int dp = (int)(width/(metrics.density)); 

我這樣做,所以讓我們假設我densitydpi是120..and widthpixel 240 .. 通過計算,我得到240/0.75 ....所以我有320 widthdpi?

但是,情況並非如此.... widthdpi小於320我認爲...因爲320在屏幕上與我錯誤....使用120作品。

在Nexus 4 ...寬度爲768和320 densitydpi ......我把二分之七百六十八,我得到384正確的寬度密度DPI(它的工作原理)

但是在其他的像240,160,120密度widthdpi的dpi..the計算似乎是錯誤的...

+0

有件事我補充。例如在上面的情況...如果我做layout_margin 20 dp ...我從320中扣除40 ...我應該得到280 ..但我得到sthg像240 ...所以widthdpi計算錯了 – user3278732

+0

對於大多數應用程序中,沒有理由計算這些值,假設您正在編寫佈局並一直使用dp值(無論顯示設備的密度如何,它都會自動正確地縮放事物)。 – ianhanniballake

回答

13

Supporting Multiple Screens guide's definition of DP

px = dp * (dpi/160) 

因此

dp = px/(dpi/160) 

或等效

dp = px * 160/dpi 

記住DP代表「密度獨立像素」 - 即1DP是LDPI設備上的相同的物理尺寸,因爲它是一個xxhdpi設備上。因此,你應該期望所有的手機有大約〜寬度300-400dp,通過DP指出桶的大小:

  • XLARGE屏幕至少960dp X 720dp
  • 大屏幕至少640dp X 480dp
  • 標準屏幕至少470dp X 320dp
  • 小屏幕至少426dp X 320dp
+0

dp =(int)(width * 160/metrics.densityDpi);我這樣做,我認爲我還是錯了 – user3278732

+0

你是什麼意思的'錯誤'? – ianhanniballake

+0

屏幕上的240-320像素,密度dpi 120.我通過計算得到我的屏幕寬度dp 320 ...但是,如果我寫120dp寬度,它也需要所有寬度。 – user3278732