2013-03-21 77 views
2

我試圖瞭解哪種佈局使用哪種設備。試圖定義設備應使用哪種佈局

舉例來說,我有不同的佈局:

  • 佈局
  • 佈局sw600dp
  • 佈局sw720dp

的Nexus 7" (800x1280)使用佈局sw600dp

Samsung GTp3100 7「(600x1.024)使用layout-sw600dp

三星標籤10.1(1280×800)使用佈局sw720dp

索尼XPERIA小號4.3(1280×720)使用佈局

你們能否解釋一下 「與你的話」 爲什麼不是XPERIA S使用sw600dp或sw720dp? SW!=最小寬度?所以從XPERIA S最小的是720.它應該使用sw720或sw600,對吧?或者我錯了?

我讀過大量的文檔,但不明白爲什麼會發生這種情況。

非常感謝。

回答

5

最小寬度限定符主要指畫面大小而不是物理像素。

例如,使用sw720dp意味着設備的最小屏幕寬度必須爲720(設備無關像素)的720 dp--這不是大約720個物理像素。從文檔中...

與密度無關的像素相當於160 dpi屏幕上的一個物理像素,它是系統爲「中等」密度屏幕假定的基準密度。

索尼XPERIA小號4.3的物理寬度是2.5" ,但我不知道有多少的是屏幕的實際寬度。

讓我們假裝計算了的緣故屏幕覆蓋了全寬......在這種情況下,計算dpi的寬度,我們簡單地使用720/2.5 = 288dpi

dp文檔...

DP的轉換ü屏幕像素很簡單:px = dp *(dpi/160)。

重新整理上面的公式來計算dp我們這樣做......

dp = px/(dpi/160) 

......這給我們的dp寬度(和必要的最小寬度限定)...

720/(288/160) = 400dp 

總之答案是,索尼XPERIA小號4.3可具有高密度屏幕(爲它的大小),但它不是一個大屏幕。

+0

謝謝。通過下面的代碼管理它:'float density = getResources()。getDisplayMetrics()。density; float dpHeight = outMetrics.heightPixels/density;順便說一下,是否有任何公式可以得到該值「2.5」,與getResources()。getDisplayMetrics()。get; get。get()相同。 – Reinherd 2013-03-22 08:16:42

+0

@SergiCastellsaguéMillán:您可以使用'DisplayMetrics'的'xdpi'和'ydpi'字段來獲取每個維度的實際dpi值。計算物理屏幕尺寸就是重新排列我用來計算我的答案中的dpi的公式(例如,'720/2.5 = 288 dpi',它是'px/size = dpi'),所以'px/dpi =大小'。從'DisplayMetrics'你可以使用'widthPixels/xdpi'來獲得屏幕的物理寬度。 – Squonk 2013-03-23 02:13:48