有一种非常简洁的方法可以在没有Context的情况下将dp转换为px,它是这样的:
public static int dpToPx(int dp) {
float density = Resources.getSystem().getDisplayMetrics().density;
return Math.round((float) dp * density);
}
在Google GitHub page上的每个Google示例中,他们都使用以下方法:
public static int convertDpToPixel(Context ctx, int dp) {
float density = ctx.getResources().getDisplayMetrics().density;
return Math.round((float) dp * density);
}
第一种方法有问题吗?对我而言,它在我的所有应用程序中运行良好,但我想知道是否存在可能失败的情况?
答案 0 :(得分:4)
是否存在可能失败的情况?
是的,有!
Android支持不同的屏幕,例如您可以使用Chromecast投放应用或通过其他方式连接到其他屏幕。在这种情况下,值将无法正确转换为其他屏幕。
来自Resources.getSystem()
的{{3}}:
返回仅提供访问权限的全局共享Resources对象 系统资源(没有应用程序资源),并且未配置 当前屏幕(不能使用尺寸单位,不改变基础 在方向等)。