在Android中获取屏幕尺寸

时间:2015-03-25 14:36:07

标签: android android-layout android-activity

在Android中似乎有两种方法可以获得屏幕宽度和宽度。高度:

第一种方式:

 WindowManager windowManager =
                (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        Display display = windowManager.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        //We get width and height in pixels here
        width = size.x;
        height = size.y;

第二种方式是:

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
//We get width and height in pixels here
int width = metrics.widthPixels;
int height = metrics.heightPixels;

两种方式都获得屏幕宽度和高度(以像素为单位)。所以,我对以下两个问题感到有点困惑:

Q1。这两种屏幕尺寸在理论上有什么不同?

Q2。为什么谷歌提供了两种获取屏幕尺寸的方法?我认为背后一定有理由。

3 个答案:

答案 0 :(得分:0)

您应该阅读有关这两个类

的内容

窗口管理器 http://developer.android.com/reference/android/view/WindowManager.html

资源 http://developer.android.com/reference/android/content/res/Resources.html

窗口管理器通过获取窗口管理器实例正在管理的显示的宽度和高度(包括辅助显示)来获取屏幕宽度和高度。

从Resources获取宽度和高度会返回当前显示指标,并且对象应被视为只读。

答案 1 :(得分:0)

查看关于DisplayMetrics的{​​{3}}:

  

描述有关显示的一般信息的结构,例如   它的大小,密度和字体缩放。

似乎DisplayMetrics类为您提供了基本的硬件显示信息。它不关心可能(或可能不)存在的任何系统UI组件。

虽然docs类更加扩展并考虑了上述事项。

回答你的问题:

int width = metrics.widthPixels;
int height = metrics.heightPixels;

将为您提供绝对值,即您将在全高清显示器上获得1080/1920。

getSize()方法的描述几乎是不言自明的:

  

[...]此方法返回的大小不一定代表   显示的实际原始大小(原始分辨率)。归来了   可以调整大小以排除某些系统装饰元素   总是可见的。 [...]

答案 2 :(得分:0)

DisplayMetrics是一个数据对象,它最能描述当前显示的详细信息,包括widthPixelsheightPixelsxDpi,{{ 1}},yDpidensitydensityDpi

scaledDensity是一个更强大的逻辑对象,它执行查找这些参数的逻辑操作。例如,Display可用于提取Display,如下所示:

DisplayMetrics

注意:以上代码实质上是Android在DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); // metrics will now be populated with the required data. 对象中生成DisplayMetrics实例的方式。

我经常使用Resources,但这两个选项都可以正常使用。