在没有上下文的情况下将dp转换为px

时间:2017-03-08 14:09:11

标签: android screen-size pixel-density

有一种非常简洁的方法可以在没有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);
}

第一种方法有问题吗?对我而言,它在我的所有应用程序中运行良好,但我想知道是否存在可能失败的情况?

1 个答案:

答案 0 :(得分:4)

  

是否存在可能失败的情况?

是的,有!

Android支持不同的屏幕,例如您可以使用Chromecast投放应用或通过其他方式连接到其他屏幕。在这种情况下,值将无法正确转换为其他屏幕。

来自Resources.getSystem()的{​​{3}}:

  

返回仅提供访问权限的全局共享Resources对象   系统资源(没有应用程序资源),并且未配置   当前屏幕(不能使用尺寸单位,不改变基础   在方向等)。