Android 发布7”上的DP计算;平板电脑及;7“;平板电脑仿真器

Android 发布7”上的DP计算;平板电脑及;7“;平板电脑仿真器,android,dpi,android-screen,density-independent-pixel,Android,Dpi,Android Screen,Density Independent Pixel,我对7英寸平板电脑(800x480px)的dp计算有一些问题。以下是我的计算方法。找不到我在计算中的错误或我的想法: 我正在测试三台设备: Nexus One:800x480px,3.7英寸显示屏() 华为Ideos:320x240px,2.8英寸显示屏() Ainol Novo 7英寸平板电脑:800x480px,7英寸显示屏() 根据显示尺寸,我根据公式手动计算DPI(每英寸点数): sqrt(w^2 + h^2) / in 因此,我得到: NexusOne:sqrt(800*800+48

我对7英寸平板电脑(800x480px)的dp计算有一些问题。以下是我的计算方法。找不到我在计算中的错误或我的想法:

我正在测试三台设备:

  • Nexus One:800x480px,3.7英寸显示屏()
  • 华为Ideos:320x240px,2.8英寸显示屏()
  • Ainol Novo 7英寸平板电脑:800x480px,7英寸显示屏()
  • 根据显示尺寸,我根据公式手动计算DPI(每英寸点数):

    sqrt(w^2 + h^2) / in
    
    因此,我得到:

  • NexusOne:sqrt(800*800+480*480)/3.7=252.15dpi
  • 华为Ideos:sqrt(320*230+240*240)/2.8=142.86dpi
  • Ainol Novo 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 One: 标度密度:1.5,密度DPI:240,dp宽度:533,dp高度:320
  • 华为Ideos: 标度密度:0.75,密度DPI:120,dp宽度:426,dp高度:320
  • Ainol Novo 7英寸片剂: 标度密度:1.0,密度DPI:160,dp宽度:800,dp高度:480
  • 我从我的活动中的java代码中得到的密度dpi与我计算的dpi值不同,显然Android将其四舍五入到120、160或240中的一个,这是很正常的。到目前为止没有问题

    问题/问题1:

    对于第三款设备,Novo 7英寸平板电脑: 称标度密度为1.0,dp中的宽度为800,与px的数量相同。然而,事实并非如此;当我创建一个全屏应用程序并在上面放置一个视图时,只有533dp x 320dp的视图实际适合屏幕上的显示。因此,它的dp测量值与Nexus One相同;即使Nexus One的DPI值较高,但像素数相同。这怎么可能

    问题/问题2:

    我为模拟器创建了一个AVD,精确的测量结果与Novo 7“平板电脑相同。 我的java代码中的日志行显示的值与真实平板电脑设备的值相同:

  • Ainol Novo 7“平板电脑仿真器: 标度密度:1.0,密度DPI:160,dp宽度:800,dp高度:480
  • 但是,在emulator上,我可以将580dpx320 dp的视图放置在全屏活动中完全可见的位置。仿真器和实际设备之间的宽度dp如何可能存在差异,且测量值完全相同

    问题/问题3:

    上面写着:

    帮助您针对不同类型的

    设备,以下是一些典型屏幕宽度的数字:

    480dp:类似Streak(480x800 mdpi)的tweener平板电脑

    600dp:7英寸平板电脑(600x1024 mdpi)

    我认为我的平板电脑应该属于这些类别之一,然而,它既没有480宽,也没有600 dp宽,而是介于两者之间;在我的例子中,533dp(真实设备)或580dp(模拟器)

    如果是这种情况,那么这种“典型屏幕宽度”概述有什么好处呢?如果事实上并非如此,但来自不同供应商的设备在标准值之间可以有任何其他随机值?
    然后,我可以继续工作,然后再回到像素值,因为使用dp的全部好处似乎都没有了。

    Argh,我只是忘记了这一行

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="11" />
    
    
    
    在我的舱单上


    没有android:Minsdk版本,问题总是存在;我认为安卓1.5的遗留问题。

    我看到这个问题还没有解决,只是想补充一点,Minsdk版本在缺席时出现问题的原因是