在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:实现带图片和CheckBox的ListView
  2. Android通过手机GPS获取经纬度方法
  3. Android根据当前时间获取前面的时间日期,或者之后的时间日期
  4. 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图
  5. Android(安卓)Handler消息机制中的ThreadLocal源码分析
  6. 获取手机的mac地址
  7. Android可滑动TextView设置大段文字后,如何滚动到结尾显示。
  8. Android(安卓)Task的应用
  9. android 中Bitmap 和 Drawable互换

随机推荐

  1. android不是内部或外部命令,也不是可运行
  2. Android
  3. Android(安卓)之 shape和selector用法介
  4. 为什么iOS平台更容易吸引开发者?
  5. TextView中的文字添加阴影效果及Style的
  6. 27:活用Android的Message Queue(2/3)
  7. android中json的序列化与反序列化
  8. Android之Service设置android:process作
  9. 说说 Android(安卓)的常见 UI 控件
  10. Android深入浅出之Audio 第一部分 AudioT