【问题标题】:How can I get the size of the android application window and not the physical screen size?如何获取 android 应用程序窗口的大小而不是物理屏幕大小?
【发布时间】:2012-11-19 05:49:59
【问题描述】:

在 Android 中,如何获取应用窗口的大小?我不是在寻找物理屏幕大小,而是屏幕上应用程序窗口的实际大小。例如。一般拿掉通知栏、轻触按钮等之后剩下的东西。

【问题讨论】:

    标签: android dimensions


    【解决方案1】:

    如果您想要应用程序窗口的大小,您可以调用 yourview.getHeight() 和 yourview.getWidth();但是必须绘制视图才能使其起作用。

    如果您想在绘制之前获得高度,您可以这样做:

    https://stackoverflow.com/a/10134260/1851478

    虽然有很多不同的屏幕/视图测量情况,所以如果您可以更具体地了解“应用程序窗口的实际大小”,这是您的应用程序吗?还是主屏幕应用?或其他应用?

    如果你想要可用空间减去装饰(状态栏/软按钮),你也可以反过来攻击它,例如测量实际屏幕尺寸(方法因 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);
    

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

    当然需要您提供更多信息才能给出更准确的答案。

    【讨论】:

    • 谢谢,我追求的是我自己的活动维度。父视图宽度/高度会为我做,但正如你所说,需要先绘制视图。
    • 酷,我提供的链接应该可以为您完成,但您可以忽略测量后隐藏的部分。或者,在绘制视图后调用 .getHeight() 和 .getWidth() (例如在你已经调用 setContentView(R.layout.yourview); 的活动中
    • “如果你想在绘制之前获得高度,你可以这样做:” - 然后你提供一些代码的链接,这些代码只能在视图膨胀后确定尺寸。
    • 这对谷歌来说太疯狂了——用户界面通常应该是除了平面设计师之外的所有人的事后想法;我赞赏 Google 为应用程序提供了相当低级的功能,但他们忘记了如果开发人员不想潜入随机窗口系统,那么让 UI 等常见/必要的东西“正常工作”几乎同样重要。同样值得注意的是,developer.android.com/reference/android/view/Display.html 的文档对于某些设备来说是完全错误的。我在华为 Y320 上运行 4.2.2,getRealMetrics() 和 getMetrics() 返回完全相同的结果
    【解决方案2】:

    这也很简单:

    Rect windowRect = new Rect();
    
    yourView.getWindowVisibleDisplayFrame(windowRect);
    
    int hWindow = windowRect.height();
    int wWindow = windowRect.width();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多