获取DisplayMetrics的正确方法:getResources()或getWindowManager()

Ton*_*han 18 android

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

我问,因为我已经看到了两种方法:

第一:

    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
Run Code Online (Sandbox Code Playgroud)

然后通过metrics.density或获取信息metrics.xdpi

第二:

    getResources().getDisplayMetrics().density
Run Code Online (Sandbox Code Playgroud)

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

    DisplayMetrics metricsMethodTwo = getResources().getDisplayMetrics()
Run Code Online (Sandbox Code Playgroud)

然后你可以得到正常的信息:metricsMethodTwo.densitymetricsMethodTwo.xdpi

我在Docs的各个地方都见过.那么有什么区别,如果有的话,何时一种方法比另一方更受青睐(或更合适)?为什么?谢谢

Ale*_*dam 17

public DisplayMetrics getDisplayMetrics ()
Run Code Online (Sandbox Code Playgroud)

返回对此资源对象有效的当前显示指标.返回的对象应视为只读.

public void getMetrics (DisplayMetrics outMetrics)
Run Code Online (Sandbox Code Playgroud)

从此显示的数据初始化DisplayMetrics对象.

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

Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)
Run Code Online (Sandbox Code Playgroud)

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

这就是区别.如果您仅使用默认资源和默认显示,则值可能没有区别.

  • 谢谢!我仍然想象你何时会创建自己的`资源`.有什么时候你会这样做或为什么?(即两种方法的值实际上会不同?) (3认同)