短问题
DisplayMetrics.densityDpi 在有根设备上似乎为零。
长问题
我在我的应用程序中使用以下代码:
public static int getIconSize(Activity activity) {
int size;
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch (metrics.densityDpi) {
case DisplayMetrics.DENSITY_LOW:
size = 36;
break;
case DisplayMetrics.DENSITY_MEDIUM:
size = 48;
break;
case DisplayMetrics.DENSITY_TV:
size = 64;
break;
case DisplayMetrics.DENSITY_HIGH:
size = 72;
break;
case DisplayMetrics.DENSITY_XHIGH:
size = 96;
break;
case DisplayMetrics.DENSITY_400:
size = 120;
break;
case DisplayMetrics.DENSITY_XXHIGH:
size = 144;
break;
case DisplayMetrics.DENSITY_560:
size = 168;
break;
case DisplayMetrics.DENSITY_XXXHIGH:
size = 192;
break;
default:
size = (int) (metrics.densityDpi * (3/10));
}
return size;
}
我使用它来缩放我的应用程序在运行时制作的图标,并缩放我从其他应用程序获得的图标,因为它们的大小并不总是正确的。
这很好用,但在(某些)根设备上它似乎失败了。Size 返回为零,因此从代码中我们可以得出结论,metrics.densityDpi 必须等于零。(我没有root手机来测试这个)
我查看<supports-screens>
了清单的部分,但似乎默认值是我需要的。
有谁知道发生这种情况的原因以及可能的解决方法?
谢谢