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

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

1屏幕区域的获取

[java] view plain copy
  1. activity.getWindowManager().getDefaultDisplay();

2、应用区域的获取

[java] view plain copy
  1. RectoutRect=newRect();
  2. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);

其中,outRect.top 即是状态栏高度。

3、view绘制区域获取

[java] view plain copy
  1. RectoutRect=newRect();
  2. activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);

用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。

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

详细代码如下:

[java] view plain copy
  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. }
[java] view plain copy
  1. privateclassDimension{
  2. publicintmWidth;
  3. publicintmHeight;
  4. publicDimension(){}
  5. }

更多相关文章

  1. Android(安卓)自定义WheelView滚动控件
  2. Android中软键盘监听
  3. 添加自定义风格的titleBar栏
  4. 获取手机屏幕宽高、分辨率等信息
  5. android中打印函数调用栈、内存使用、屏幕分辨率
  6. android 获取手机屏幕分辨率和setRequestedOrientation设置屏幕
  7. 超简单实现Android(安卓)屏幕截屏(需要系统级权限)
  8. android 获取view在屏幕中的位置
  9. Android唤醒屏幕按键

随机推荐

  1. angular.min.js:107 Error: [ng:areq] ht
  2. PHP多线程编程
  3. 使用AJAX将数据发送到.php文件,如何从中获
  4. 解决PHP导出大量数据时设置超链接的问题
  5. 为什么我们坚持选择用php
  6. PHP结合Redis来限制用户或者IP某个时间段
  7. PHP替换标签字符
  8. 单击保存按钮(PHP和MSQL)时如何保存记录列
  9. 根据网址上的国家/地区将用户重定向到正
  10. 今天开始学php,第一次写博客以鼓励自己能