如何获取 Android 应用窗口的大小而非物理屏幕大小?

11
在Android中,我怎样才能获取应用程序窗口的大小?我并不是在寻找物理屏幕尺寸,而是想要获取应用程序窗口在屏幕上的实际大小。例如,减去通知栏、软触摸按钮等后一般剩下什么。
2个回答

13

如果你想获取应用程序窗口的大小,只需调用yourview.getHeight()和yourview.getWidth()即可。但是在这种情况下,视图必须已经被绘制。

如果你想在视图绘制之前获取其高度,可以使用以下方法:

https://dev59.com/x2kw5IYBdhLWcg3w4emS#10134260

屏幕/视图测量有很多不同的情况,因此如果您能更具体地说明“应用程序窗口的实际大小”,这是指您的应用程序还是主屏幕应用程序?或者是其他的应用程序?

如果您想要减去装饰(状态栏/软按钮)后的可用空间,也可以进行反向攻击,例如测量实际屏幕尺寸(API的方法因版本而异),然后减去状态栏的高度。

示例显示高度:

// Deprecated
((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight();

状态栏高度:

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

有很多不同的方法可以做到这一点。

但是,如果您能提供更多信息,我就能给出更准确的答案。


谢谢,我需要自己的活动尺寸。父视图的宽度/高度对我来说足够了,但正如您所说,需要先绘制视图。 - Chris Knight
好的,我提供的链接应该可以帮到你,不过你可以忽略关于测量后隐藏部分的内容。或者在视图绘制后直接调用 .getHeight() 和 .getWidth() 方法(例如在你已经调用 setContentView(R.layout.yourview); 的活动中)。 - logray
如果你想在绘制之前得到高度,你可以这样做:然后提供一个链接到一些代码,该代码只能确定视图被填充后的尺寸。 - Johann
8
这是谷歌的疯狂行为 - 对于除了图形设计师以外的所有人来说,用户界面通常应该是一个较次要的考虑因素。我赞扬谷歌向应用程序授予相当低级别的功能,但他们忘记了,如果开发人员不想深入到随机窗口系统中,使常见/必要的事情(如UI)“只需工作”也几乎同样重要。此外, http://developer.android.com/reference/android/view/Display.html 上的文档在某些设备上就是错误的。我在华为Y320上运行4.2.2版本,getRealMetrics() 和 getMetrics() 返回完全相同的结果。 - CCJ

10

这也相当简单:

Rect windowRect = new Rect();

yourView.getWindowVisibleDisplayFrame(windowRect);

int hWindow = windowRect.height();
int wWindow = windowRect.width();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接