Andorid获取状态栏高度

在应用开发中,有时我们需要用代码计算布局的高度,可能需要减去状态栏(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

时间: 2024-10-11 04:48:30

Andorid获取状态栏高度的相关文章

【转】Andorid获取状态栏高度

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

获取状态栏高度

Android中获取状态栏高度的两种方法: public static int getStatusHeight(Context context) { int statusHeight = 0; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int resourceId = Integer.parseInt(c

android获取状态栏高度

获取android屏幕上状态栏的高度方法网上很多这里不再敖述,只举一个例子 Rect rect = new Rect();getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); rect.top便是状态栏的高度. 但是在响应的布局文件中,如果最外层的layout或者View 长宽设置为fill_parent时,上面的rect.top就为0了.

android 获取状态栏高度

public int getStatusBarHeight(Context context) { Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField(&

Android获取状态栏和标题栏的高度

版权声明:本文为博主原创文章,未经博主允许不得转载. 1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏. 于是,我们就可以算出状态栏的高度了. [Java] view plain copy Rect frame = new Rect();getWindow().getDecorView()

Android -- 状态栏高度

干货 Class<?> c = null; Object obj = null; Field field = null; int x = 0, sbar = 0; try { c = Class.forName("com.android.internal.R$dimen"); obj = c.newInstance(); field = c.getField("status_bar_height"); x = Integer.parseInt(field

Android获取actionbar高度和StatusBar高度的方法

ActionBar: getActionBar().getHeight(); StatusBar: /** * 获取状态栏高度 * * @return */ public static int getStatusBarHeight(Context context) { Class<?> c = null; Object obj = null; java.lang.reflect.Field field = null; int x = 0; int statusBarHeight = 0; tr

状态栏高度变化处理

iOS中的状态栏的正常高度是20,但并不是固定高度的,至少在通话中和有热点连接时,它的高度就会变成40.这时APP的UI会整体下移,造成UI显示异常. 说完了处理这个东西的重要性,那么做起来是否简单呢? 问题1:怎么获取状态栏高度?状态栏的高度并非永远都是20,当有热点连接或者通话时,它的高度就会变成40.所以取得状态栏高度的标准方法如下,可以用宏来封装. [UIApplication sharedApplication].statusBarFrame.size.height 问题2:怎么知道状

Android如何获取系统高度、标题栏和状态栏高度

在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息.为以后方便,在此做个简单记录. 晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文http://www.iteye.com/topic/828830 ) 1. 屏幕区域的获取 [java] view plaincopy activity.getWindowManager().getDefaultDisplay(); 2.应用区域的获取 [java] view plaincopy R