谁能告诉我Android是如何计算屏幕密度的?
我的问题是我有一个480x800分辨率和7英寸对角线屏幕的设备(ODYS Space)。如果我计算它的密度,我得到的值是133 DPI,但Android (2.2和2.3也是)报告它是“中”密度设备(160 DPI)。
我正在与多屏幕支持作斗争,所以我认为133 DPI将被报告为“低”而不是“中”,所以现在我的屏幕布局在这个中等报告的设备上看起来相当愚蠢。
我用下面这样的代码检查设备:
DisplayMetrics dMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
int d=dMetrics.densityDpi;如果我在已配置虚拟设备(480x800/7“和133DPI)上运行该代码,则会得到density=120。
在真正的设备上,为什么显示为160?
发布于 2014-09-21 03:23:55
这里有两个不同的东西。
AVD
因此,120和160之间的半点是140,因此133dpi -> ldpi。
最终的结果是,你需要创建一个新的设备定义,在这里你手动地说你的7英寸480x800设备实际上是一个中等密度的设备,它应该可以工作。如果它不能工作,当我们为一个特定的基于AVD的设备配置仿真器时,这对我们来说是一个错误。这在Android平台本身不是一个问题,因为它不计算任何东西。
发布于 2014-03-05 10:02:30
我已经更新了2014年的另一个解决方案。
在您的某个活动中调用此方法:
private void tellMeDensity() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int dpiClassification = dm.densityDpi;
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;
Toast.makeText(this, "xdpi=" + xDpi, Toast.LENGTH_SHORT).show();
Toast.makeText(this, "ydpi=" + yDpi, Toast.LENGTH_SHORT).show();
switch(dpiClassification) {
case DisplayMetrics.DENSITY_LOW:
Toast.makeText(this, "low density", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_MEDIUM:
Toast.makeText(this, "medium density", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_HIGH:
Toast.makeText(this, "high density", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_XHIGH:
Toast.makeText(this, "xhigh density", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_XXHIGH:
Toast.makeText(this, "xxhigh density", Toast.LENGTH_SHORT).show();
break;
case DisplayMetrics.DENSITY_XXXHIGH:
Toast.makeText(this, "xxxhigh density", Toast.LENGTH_SHORT).show();
break;
}
}发布于 2014-09-18 15:55:52
实际上,如果您想要实际显示dpi,如果您查询显示指标,答案介于两者之间:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int dpiClassification = dm.densityDpi;
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;densityDpi将为您提供您应该使用的密度的值/建议
0.75 - ldpi - 120 dpi
1.0 - mdpi - 160 dpi
1.5 - hdpi - 240 dpi
2.0 - xhdpi - 320 dpi
3.0 - xxhdpi - 480 dpi
4.0 - xxxhdpi - 640 dpi正如之前的帖子中指定的那样
但是dm.xdpi不会总是给你给定显示器的实际dpi,所以也许显示器的实际dpi应该是dpi。
https://stackoverflow.com/questions/9053779
复制相似问题