在应用开发中,有时我们需要用代码计算布局的高度,可能需要减去状态栏(status bar)的高度。状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_height。但是系统给我们提供了一个Resource类,通过这个类我们可以获取资源文件。下边是在Activity中获取的方法

1
2
3
4
5
6
7
8
public int getStatusBarHeight() {
  int result = 0;
  int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
  if (resourceId > 0) {
      result = getResources().getDimensionPixelSize(resourceId);
  }
  return result;
}

这里还有另外一种方法,大家都知道Android的所有资源都会有惟一标识在R类中作为引用。我们也可以通过反射获取R类的实例域,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 获得状态栏的高度
 *
 * @param context
 * @return
 */
public static int getStatusHeight(Context context) {
 
    int statusHeight = -1;
    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());
        statusHeight = context.getResources().getDimensionPixelSize(height);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return statusHeight;
}

我们可以看到得到的结果是一样的。当然,获取状态栏的高度方法是不是就只有以上两种呢,当然不是,下边再介绍一种获取状态栏高度的方法,不过不推荐使用,因为这个方法依赖于WMS(窗口管理服务的回调)。

1
2
3
4
Rect rectangle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight= rectangle.top;

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

最新文章

  1. ExcelReport第三篇:扩展元素格式化器
  2. GMap.Net开发之自定义Marker
  3. MyEclipse 10.7 添加JBOSS 6应用服务器
  4. 2015/9/9 js继续学习
  5. Redis,Memcache,mongoDB的区别
  6. Android开发UI之动画侦听
  7. kobox: key_proc.c -v1 怎样使用proc文件系统调试驱动
  8. android项目的的目录结构
  9. Cocos2dx-3.1.1 冒险01----&amp;gt; 文件夹结构、新项目project创建并执行
  10. Sharepoint 的定制 - 代码附加内容编辑器
  11. TCP网络编程小结
  12. TCP协议和UDP协议的区别
  13. java操作JacocClient下载dump文件
  14. 5、Makefile基础知识汇总(转自陈皓总述)
  15. c++第五天:默认初始化
  16. python 时间元组转可视化时间
  17. Pat乙级1011题:A+B和C
  18. “吃神么,买神么”的第二个Sprint计划(计划过程内容)
  19. hdu4280网络流之dinic
  20. 基于UDP套接字编程实例

热门文章

  1. 在Ubuntu上安装Hive
  2. sublime text3 注册码 (Version 3.0)
  3. 2019.07.05 纪中_B
  4. P1828香甜的黄油
  5. redis 学习(14)-- HyperLogLog
  6. springboot添加https
  7. Git复习(八)之快速理解Git结构
  8. [转载]C++STL概述
  9. MySQL 的索引是什么?怎么优化?
  10. openlayers之天地图为底图 叠加其他底图 加载遇到的各种报错