Android - PX到DP - 错误的布局高度

时间:2015-04-09 13:53:54

标签: android android-layout

我在布局文件中给出了64dp的布局高度,并观察到计算和实际像素高度的不匹配。

HDPI设备 - 计算高度 - 96像素,实际高度:102像素 XXHDPI设备 - 计算高度 - 192像素,实际高度:204像素

任何人都可以帮助我理解计算和实际身高的差异。

1 个答案:

答案 0 :(得分:2)

mdpihdpixhdpi等是“广义密度”。也就是说,dpi组或范围。

来自Android guide

enter image description here

例如,两个设备的dpi值分别为310和320 dpi,并且属于同一组:xhdpi

设备代码完成的计算使用精确的dpi值。虽然基于dpi组的计算假设如下:

  1. ldpi(低)~120dpi
  2. mdpi(中)~160dpi
  3. hdpi(高)~240dpi
  4. xhdpi(超高)~320dpi
  5. xxhdpi(extra-extra-high)~480dpi
  6. xxxhdpi(extra-extra-extra-high)~640dpi
  7. <强>更新

    以下代码:

    int widthDp = 160;
    
    Log.i("TEST", "Actual DPI: " + getResources().getDisplayMetrics().xdpi);
    
    float widthDevice = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,widthDp,getResources().getDisplayMetrics());
    
    Log.i("TEST", widthDp + " dip in pixels on device: " + widthDevice);
    

    在两个hdpi设备上运行时:

    213 DPI设备:

    2164-2164/com.example.android.dpitest I/TEST﹕ Actual DPI: 213.0
    2164-2164/com.example.android.dpitest I/TEST﹕ 160 dip in pixels on device: 213.0
    

    240 DPI设备:

    2852-2852/com.example.android.dpitest I/TEST﹕ Actual DPI: 240.0
    2852-2852/com.example.android.dpitest I/TEST﹕ 160 dip in pixels on device: 240.0