android - 获取 DisplayMetrics : getResources() or getWindowManager() 的正确方法

标签 android

获取 DisplayMetrics 的正确方法是什么,即获取屏幕/显示信息,例如 densityxdpi

我问是因为我看到了两种解决方法:

第一:

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

然后通过metrics.densitymetrics.xdpi等获取信息

第二:

    getResources().getDisplayMetrics().density

在这种方法中,我相信您也可以只初始化一个变量来保存 DisplayMetric,然后像在 FIRST 方法中一样获取信息:

    DisplayMetrics metricsMethodTwo = getResources().getDisplayMetrics()

然后你就可以像平常一样获取信息:metricsMethodTwo.densitymetricsMethodTwo.xdpi

我在 Docs 的各个地方都见过这两种情况。那么如果有的话有什么区别,什么时候一种方法比另一种更受欢迎(或更合适),为什么?谢谢

最佳答案

public DisplayMetrics getDisplayMetrics ()

Return the current display metrics that are in effect for this resource object. The returned object should be treated as read-only.

public void getMetrics (DisplayMetrics outMetrics)

Initialize a DisplayMetrics object from this display's data.

不同之处在于 Resources 方法返回的指标是该特定 Resources 对象的指标。您始终可以使用构造函数创建一个新的 Resources 实例

Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)

您可以在其中设置您想要的任何指标,不一定是您可以从 getDefaultDisplay() 方法返回的 Display 实例中获取的指标。

这就是区别。如果您仅使用默认资源和默认显示,则值可能不会有所不同。

关于android - 获取 DisplayMetrics : getResources() or getWindowManager() 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6377195/

相关文章:

android - 当 ViewPager 中的 Fragment 从 BackStack 中保留时 WebView 重新加载

java - junit 3 的故障跟踪窗口不显示预期值

android - 保存的图像覆盖了 SD 卡 android 中的先前图像

javascript - 使用 HTML5/JS 的移动设备后置摄像头

Android Google Maps API v2 显示路线

android - 获取最近和正在运行的应用程序列表而不是进程

android - 像 Android 4.4 一样创建蓝色 "tutorial"对话框

java - 翻译为 Kotlin 时,我是否应该更新我的 java 文件以命名为 kotlin?

android - 判断android asset entry是文件还是目录

android - 如何在android中重命名文件?