2012-02-02 133 views
2

我對7英寸平板電腦(800x480px)的dp計算有些問題,下面是我的計算方法。在計算或我的想法錯:7英寸平板電腦和7英寸平板電腦仿真器的DP計算問題

我有我的測試三種設備:

  1. 歌Nexus One:800x480px,3.7" 顯示屏(specs
  2. 華爲Ideos手機:320x240px,2.8" 顯示屏( specs
  3. Ainol諾7" 片劑:800x480px,7" 顯示(specs

基於顯示尺寸,我手動計算DPI(每英寸點數)的基礎上,表現公式:

sqrt(w^2 + h^2)/in 

所以我得到:

  1. Nexus之一:SQRT(800×800 + 480×480)/3.7 = 252.15dpi
  2. 華爲的Ideos:SQRT(320 * 230 + 240×240)/2.8 = 142.86dpi
  3. 艾諾諾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); 

結果如下:

  1. Nexus之一: 縮放密度:1.5,密度DPI:240,寬度以dp:533,身高以dp:320
  2. 華爲的Ideos: ScaledDensity:0.75,密度DPI:120,寬度以dp:426,高度在DP:320
  3. 艾諾諾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有什麼不同,並且測量結果完全相同?

    enter image description here

    問題/疑問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的全部好處似乎都不存在。

    回答

    2

    哎呀,我根本都忘了行

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" /> 
    

    在我的清單。

    沒有android:minSdkVersion,總是有問題;我認爲Android 1.5的遺留問題。

    +0

    我看到了這個問題,開放,只是想補充一點的是,的minSdkVersion成爲一個問題的原因缺席時,是因爲[兼容模式](http://developer.android.com/guide/practices/screen-compat -mode.html) – 2012-10-03 14:23:06

    相關問題