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

在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息。为以后方便,在此做个简单记录。

晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文http://www.iteye.com/topic/828830

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

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

1屏幕区域的获取

  1. activity.getWindowManager().getDefaultDisplay();
2、应用区域的获取
  1. RectoutRect=newRect();
  2. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
其中,outRect.top 即是状态栏高度。

3、view绘制区域获取

  1. RectoutRect=newRect();
  2. activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。

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

详细代码如下:

  1. publicclassScreenSizeextendsActivity{
  2. privateTextViewmScreenSizeView;
  3. @Override
  4. publicvoidonCreate(BundlesavedInstanceState){
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_screen_size);
  7. mScreenSizeView=(TextView)findViewById(R.id.screen_size);
  8. }
  9. @Override
  10. publicvoidonWindowFocusChanged(booleanhasFocus){
  11. super.onWindowFocusChanged(hasFocus);
  12. if(hasFocus){
  13. System.out.println("second");
  14. StringBuildersb=newStringBuilder();
  15. Dimensiondimen1=getAreaOne(this);
  16. Dimensiondimen2=getAreaTwo(this);
  17. Dimensiondimen3=getAreaThree(this);
  18. sb.append("Areaone:\n\tWidth:"+dimen1.mWidth+";\tHeight:"+dimen1.mHeight);
  19. sb.append("\nAreatwo:\n\tWidth:"+dimen2.mWidth+";\tHeight:"+dimen2.mHeight);
  20. sb.append("\nAreathree:\n\tWidth:"+dimen3.mWidth+";\tHeight:"+dimen3.mHeight);
  21. mScreenSizeView.setText(sb.toString());
  22. }
  23. }
  24. @Override
  25. publicbooleanonCreateOptionsMenu(Menumenu){
  26. getMenuInflater().inflate(R.menu.activity_screen_size,menu);
  27. returntrue;
  28. }
  29. privateDimensiongetAreaOne(Activityactivity){
  30. Dimensiondimen=newDimension();
  31. Displaydisp=activity.getWindowManager().getDefaultDisplay();
  32. PointoutP=newPoint();
  33. disp.getSize(outP);
  34. dimen.mWidth=outP.x;
  35. dimen.mHeight=outP.y;
  36. returndimen;
  37. }
  38. privateDimensiongetAreaTwo(Activityactivity){
  39. Dimensiondimen=newDimension();
  40. RectoutRect=newRect();
  41. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
  42. System.out.println("top:"+outRect.top+";left:"+outRect.left);
  43. dimen.mWidth=outRect.width();
  44. dimen.mHeight=outRect.height();
  45. returndimen;
  46. }
  47. privateDimensiongetAreaThree(Activityactivity){
  48. Dimensiondimen=newDimension();
  49. //用户绘制区域
  50. RectoutRect=newRect();
  51. activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
  52. dimen.mWidth=outRect.width();
  53. dimen.mHeight=outRect.height();
  54. //end
  55. returndimen;
  56. }
  1. privateclassDimension{
  2. publicintmWidth;
  3. publicintmHeight;
  4. publicDimension(){}
  5. }
Android获取屏幕高度、状态栏高度、标题栏高度