Android 状态高度的测量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/owenchan1987/article/details/54097681

状态高度的测量

状态栏是显示显示手机状态(如电池电量、网络状态、时间、运营商信息等)的区域,一般内容型应用都会显示保留状态栏,但是游戏界面如果还保留状态栏就不合适了,因为游戏界面要响应各种手势,而状态栏也会响应一些手势,有可能引发错误操作,所以一般在游戏界面都会隐藏状态栏,使游戏界面全屏显示。
状态栏高度的测量我在这里提供3种方法:

(1)通过系统尺寸资源获取

状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_height。但是系统给我们提供了一个Resource类,通过这个类可以获取资源文件,借此可以获取到status_bar_height:

int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
    statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}

(2)通过R类的反射

大家都知道Android的所有资源都会有惟一标识在R类中作为引用。我们也可以通过反射获取R类的实例域,然后找status_bar_height:

int statusBarHeight = 0;
try {
    Class<?> clazz = Class.forName("com.android.internal.R$dimen");
    Object object = clazz.newInstance();
    int height = Integer.parseInt(clazz.getField("status_bar_height")
            .get(object).toString());
    statusBarHeight = getResources().getDimensionPixelSize(height);
} catch (Exception e) {
    e.printStackTrace();
    return statusBarHeight;
}

(3)借助应用区域的top属性

这就用到了开题时的那张屏幕区域划分图片,状态栏位于屏幕最顶端,其位置从(0,0)开始,故而应用区域的顶端位置(高度 = Y坐标 - 0)即为状态栏的高度:

int statusBarHeight = 0;
Rect rectangle = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
statusBarHeight = rectangle.top;
展开阅读全文

没有更多推荐了,返回首页