Android获取屏幕高度、状态栏高度、标题栏高度(一)

晒代码前先了解一下Android屏幕区域的划分,以下图(该图引用自此文http://www.iteye.com/topic/828830输入图片说明 输入图片说明app

一、 屏幕区域的获取ide

activity.getWindowManager().getDefaultDisplay();

二、应用区域的获取函数

Rect outRect = new Rect();  
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);

其中,outRect.top 便是状态栏高度。 三、view绘制区域获取ui

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

用绘制区域的outRect.top - 应用区域的outRect.top 便是标题栏的高度。 注意: 若是刚启动Activity时就要计算这些数据,最好在 onWindowFocusChanged 函数中进行, 不然获得的某些数据多是错误的,好比,应用区域高宽的获取。 详细代码以下:this

public class ScreenSize extends Activity {  
    private TextView mScreenSizeView ;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_screen_size);  
        mScreenSizeView = (TextView) findViewById(R.id.screen_size);  
    }  
  
    @Override  
    public void onWindowFocusChanged(boolean hasFocus) {  
        super.onWindowFocusChanged(hasFocus);  
        if(hasFocus){  
            System.out.println("second");  
            StringBuilder sb = new StringBuilder();  
            Dimension dimen1 = getAreaOne(this);  
            Dimension dimen2 = getAreaTwo(this);  
            Dimension dimen3 = getAreaThree(this);  
            sb.append("Area one : \n\tWidth: "+dimen1.mWidth + ";\tHeight: "+dimen1.mHeight);  
            sb.append("\nArea two: \n\tWidth: "+dimen2.mWidth + ";\tHeight: "+dimen2.mHeight);  
            sb.append("\nArea three: \n\tWidth: "+dimen3.mWidth + ";\tHeight: "+dimen3.mHeight);  
            mScreenSizeView.setText(sb.toString());  
        }  
    }  
  
    @Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        getMenuInflater().inflate(R.menu.activity_screen_size, menu);  
        return true;  
    }  
      
    private Dimension getAreaOne(Activity activity){  
        Dimension dimen = new Dimension();  
        Display disp = activity.getWindowManager().getDefaultDisplay();  
        Point outP = new Point();  
        disp.getSize(outP);  
        dimen.mWidth = outP.x ;  
        dimen.mHeight = outP.y;  
        return dimen;  
    }  
    private Dimension getAreaTwo(Activity activity){  
        Dimension dimen = new Dimension();  
      Rect outRect = new Rect();  
      activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);  
      System.out.println("top:"+outRect.top +" ; left: "+outRect.left) ;  
      dimen.mWidth = outRect.width() ;  
      dimen.mHeight = outRect.height();  
        return dimen;  
    }  
    private Dimension getAreaThree(Activity activity){  
        Dimension dimen = new Dimension();  
     // 用户绘制区域   
        Rect outRect = new Rect();  
        activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);  
        dimen.mWidth = outRect.width() ;  
        dimen.mHeight = outRect.height();  
        // end  
        return dimen;  
    }
private class Dimension {  
    public int mWidth ;  
    public int mHeight ;  
    public Dimension(){}  
}

输入图片说明