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

Vla*_*vić 6 android screen-size pixel-density

有一种非常巧妙的方法可以将dp转换为不带Context的px,它是这样的:

public static int dpToPx(int dp) {
    float density = Resources.getSystem().getDisplayMetrics().density;
    return Math.round((float) dp * density);
}
Run Code Online (Sandbox Code Playgroud)

Google GitHub页面上的每个Google示例中,他们都使用以下方法:

public static int convertDpToPixel(Context ctx, int dp) {
    float density = ctx.getResources().getDisplayMetrics().density;
    return Math.round((float) dp * density);
}
Run Code Online (Sandbox Code Playgroud)

那么第一种方法有什么问题吗?对我来说,它在我所有的应用程序中都能正常工作,但是我想知道在某些情况下它可能会失败吗?

Eya*_*ran 6

在某些情况下可能会失败?

就在这里!

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

文档Resources.getSystem()

返回一个全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问,并且没有为当前屏幕进行配置(无法使用尺寸单位,不会根据方向发生变化,等等)。