在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。为什么谷歌提供了两种获取屏幕尺寸的方法?我认为背后一定有理由。
答案 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
是一个数据对象,它最能描述当前显示的详细信息,包括widthPixels
,heightPixels
,xDpi
,{{ 1}},yDpi
,density
和densityDpi
。
scaledDensity
是一个更强大的逻辑对象,它执行查找这些参数的逻辑操作。例如,Display
可用于提取Display
,如下所示:
DisplayMetrics
注意:以上代码实质上是Android在DisplayMetrics metrics = new DisplayMetrics();
display.getMetrics(metrics); // metrics will now be populated with the required data.
对象中生成DisplayMetrics
实例的方式。
我经常使用Resources
,但这两个选项都可以正常使用。