Android:获取可用的屏幕尺寸

时间:2014-07-08 13:25:59

标签: android android-layout android-activity

某些Android应用程序仍然使用自3.0以来弃用的菜单按钮功能。许多新手机(例如Nexus)都有软件导航按钮,当应用程序使用它并且尚未定义ActionBar时,此菜单图标会附加到导航栏。

要在此方案中获得可用的屏幕尺寸,我可以从总屏幕高度中减去通知栏:

DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
int height = dm.heightPixels - getStatusBarHeight(mContext);

其中getStatusBarHeight是在别处定义的函数。

但是,如果手机有硬件导航按钮,应用程序底部会显示一个额外的导航行,如附图所示。

Bottom row with navigation actions appended to application

在这种情况下,之前的解决方案不起作用,因为需要减去添加的导航栏。

我正在寻找一种能够解决这两种情况的通用函数,通过减去软件导航栏和通知栏来返回可用的屏幕尺寸/坐标。我想避免特定于供应商/设备的检查。

似乎有一种方法可以使用getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);来解决这个问题,但需要从Window中获取哪些值?

1 个答案:

答案 0 :(得分:0)

要获得屏幕尺寸,我只需使用:

final DisplayMetrics DISPLAY_METRICS = ((Context)this).getResources().getDisplayMetrics();

然后使用以下方法检索尺寸:

final int DISPLAY_HEIGHT = DISPLAY_METRICS.heightPixels;
final int DISPLAY_WIDTH = DISPLAY_METRICS.widthPixels;

或者当我只需要一个维度时:

final int DISPLAY_HEIGHT = this.getResources().getDisplayMetrics().heightPixels;