1. 屏幕区域的获取

包含状态栏、标题栏。
activity.getWindowManager().getDefaultDisplay();

2. 应用区域的获取

包含标题栏、不包含状态栏。

Rect outRect = new Rect();  
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
//outRect.top 即是状态栏高度

3. view绘制区域获取

包含状态栏和标题栏。

Rect outRect = new Rect();  
activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);

4.通过以上数据可求得状态栏高度:

//设置内边距-top为状态栏高度
@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        //绘制区
        Rect drawRect = new Rect();
        getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(drawRect);
        //应用区
        Rect appRect = new Rect();
        getWindow().getDecorView().getWindowVisibleDisplayFrame(appRect);
        int statusBarHeight = appRect.top-drawRect.top;
        findViewById(R.id.home).setPadding(0, statusBarHeight, 0, 0);
    }


注意:如果刚启动Activity时就要计算这些数据,最好在 onWindowFocusChanged  函数中进行, 否则得到的某些数据可能是错误的,比如,应用区域高宽的获取。