我對7英寸平板電腦(800x480px)的dp計算有些問題,下面是我的計算方法。在計算或我的想法錯:7英寸平板電腦和7英寸平板電腦仿真器的DP計算問題
我有我的測試三種設備:
- 歌Nexus One:800x480px,3.7" 顯示屏(specs)
- 華爲Ideos手機:320x240px,2.8" 顯示屏( specs)
- Ainol諾7" 片劑:800x480px,7" 顯示(specs)
基於顯示尺寸,我手動計算DPI(每英寸點數)的基礎上,表現公式:
sqrt(w^2 + h^2)/in
所以我得到:
- Nexus之一:SQRT(800×800 + 480×480)/3.7 = 252.15dpi
- 華爲的Ideos:SQRT(320 * 230 + 240×240)/2.8 = 142.86dpi
- 艾諾諾7" 片劑:SQRT(800×800 + 480×480)/ 7 = 133.28 DP
現在我想輸出的屏幕的度量並且基於的dpi值其中,屏幕寬度和高度以dp(密度無關像素)表示。我的該代碼是:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Log.d(TAG, "ScaledDensity: " + metrics.scaledDensity);
Log.d(TAG, "Density DPI: " + metrics.densityDpi);
int widthInPx = 800; // 320 or 800, depending on the respective device width I'm testing
int widthInDp =(int)(widthInPx/metrics.scaledDensity);
Log.d(TAG, "width in dp: " + widthInDp);
int heightInPx = 480; // 240 or 480, depending on the respective device height I'm testing
int heightInDp =(int)(heightInPx/metrics.scaledDensity);
Log.d(TAG, "height in dp: " + heightInDp);
結果如下:
- Nexus之一: 縮放密度:1.5,密度DPI:240,寬度以dp:533,身高以dp:320
- 華爲的Ideos: ScaledDensity:0.75,密度DPI:120,寬度以dp:426,高度在DP:320
- 艾諾諾7" 片劑: ScaledDensity:1.0,密度DPI:160,寬度DP:800,高度在DP:480
密度的DPI,我從Java代碼讓我的活動內從我的計算dpi的值不同,並且顯然由Android將其舍入爲120,160或240的值之一,這是非常正常的。到目前爲止沒有問題。
問題/問題1:
在第三裝置中,所述諾7" 片劑: 的ScaledDensity據說是1.0,並且在DP的寬度被認爲是800,相同但是,這不是現實;當我創建一個全屏應用程序並在那裏放置一個視圖時,只有533dp x 320dp的視圖實際適合屏幕。所以它與Nexus One的dp測量值相同;即使Nexus One具有更高的DPI值但像素數相同。這怎麼可能?
問題/問題2:
我創建一個AVD仿真器,用精確的測量作爲諾7" 平板電腦 在我的Java代碼的日誌線顯示相同的值作爲真實平板設備:
- 艾諾諾7" 片劑模擬器: ScaledDensity:1.0,密度DPI:160,寬度DP:800,高度在DP:480
但是,在模擬器上,我可以使用580dp x 320 dp來放置視圖以在全屏活動中完全可見。模擬器和真實設備之間的寬度dp有什麼不同,並且測量結果完全相同?
問題/疑問3:
在http://developer.android.com/guide/practices/screens_support.html它說:
爲了幫助您定位你的一些設計不同類型的
設備,在這裏是典型屏幕寬度的一些數字:
...
480dp:類似Streak(480x800 mdpi)的tweener平板電腦。
600dp:7英寸平板電腦(600x1024 mdpi)。
...
我想我的平板電腦應屬於這些類別之一的,然而,它也沒有具有480寬度600也DP寬度,但介於兩者之間;在我的情況下,無論是533dp(真實設備)還是580dp(模擬器)。
如果是這種情況,那麼這種「典型屏幕寬度」概述會有什麼好處,如果實際上並非如此,但來自不同供應商的設備之間可以有任何其他隨機值標準的? 然後,我可以繼續前進,並重新使用像素值,因爲使用dp的全部好處似乎都不存在。
我看到了這個問題,開放,只是想補充一點的是,的minSdkVersion成爲一個問題的原因缺席時,是因爲[兼容模式](http://developer.android.com/guide/practices/screen-compat -mode.html) – 2012-10-03 14:23:06