Bootstrap

android 屏幕高度、状态栏高度、titlebar高度详解

一、屏幕高度、状态栏高度、titlebar高度区分


二、获取整个屏幕的高度


DisplayMetrics dm = new DisplayMetrics();  
getWindowManager().getDefaultDisplay().getMetrics(dm);  
Log.e("Allence", "屏幕高:" + dm.heightPixels);

三、获取状态栏的高度

1.通过系统尺寸资源获取

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

 /** 
 * 获取状态栏高度——方法1 
 * */  
int statusBarHeight1 = -1;  
//获取status_bar_height资源的ID  
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");  
if (resourceId > 0) {  
    //根据资源ID获取响应的尺寸值  
    statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);  
}  
Log.e("Allence", "状态栏-方法1:" + statusBarHeight1);  
2.通过R类的反射

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

/** 
         * 获取状态栏高度——方法2 
         * */  
        int statusBarHeight2 = -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());  
            statusBarHeight2 = getResources().getDimensionPixelSize(height);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        Log.e("Allence", "状态栏-方法2:" + statusBarHeight2); 
三、标题栏(titlebar)高度的测量

1.如果设置了requestWindowFeature(Window.FEATURE_NO_TITLE)标题栏高度为0

2.获取标题栏高度的方法:

			      //屏幕  
		        DisplayMetrics dm = new DisplayMetrics();  
		        getWindowManager().getDefaultDisplay().getMetrics(dm);  
		        Log.e("WangJ", "屏幕高:" + dm.heightPixels);  
		  
		        //应用区域  
		        Rect outRect1 = new Rect();  
		        getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1);  
		          
		        //View绘制区域  
		        Rect outRect2 = new Rect();  
		        getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect2);   
		        int viewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();   //要用这种方法  
		        
		        
		      //获取status_bar_height资源的ID  
		      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");  
		      if (resourceId > 0) {  
		          //根据资源ID获取响应的尺寸值  
		          statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);  
		      }  
		        
		        
		        titleHeight1 = viewTop - outRect1.top; 
		       		    	      		         
		         System.out.println(titleHeight1+"***************titleHeight1");

注意:在oncreat()方法中得到的titlebar的高度为0






;