如何计算screenWidthDp和densityDpi?

时间:2017-05-03 10:21:49

标签: android android-layout

我有两个设备,三星Tab 4和三星J Max。屏幕尺寸和分辨率相同(屏幕尺寸:7“ 分辨率:800x1280)但是当我运行以下代码时,它返回不同的值。

Configuration configuration = this.getResources().getConfiguration();
        int screenWidthDp = configuration.screenWidthDp;
        int densityDPI =  configuration.densityDpi;

Samsung Tab 4  screenWidthDp = 600 densityDPI = 213

Samsung J Max  screenWidthDp = 533 densityDPI = 240

有人知道原因吗?

1 个答案:

答案 0 :(得分:2)

制造商决定设备屏幕的密度设置。通常它会尝试将该设置与预定义的密度桶对齐(例如 hdpi tvdpi )。

这里的主要区别在于J Max是作为大型手机销售而Tab 4是平板电脑。在Android开发人员文档中,有一些共识认为平板电脑的定义是一个屏幕,其最小宽度至少为600dp(想想layout-sw600dp资源文件夹)。

因此对于Tab 4,三星选择使用tvdpi密度桶,以使屏幕空间达到600dp的最小宽度,因此应用程序将在平板电脑模式下工作。对于大型手机,他们选择了hdpi的密度桶,因此屏幕的最小宽度正好在600dp以下,533dp,因此应用程序仍将以手机模式显示。