在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息。为以后方便,在此做个简单记录。
晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文http://www.iteye.com/topic/828830 )


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);  
 
 
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。
注意: 如果刚启动Activity时就要计算这些数据,最好在 onWindowFocusChanged  函数中进行, 否则得到的某些数据可能是错误的,比如,应用区域高宽的获取。
详细代码如下:
- 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();  
 
-         
 
-         return dimen;  
 
-     }  
 
 
- private class Dimension {  
 
-     public int mWidth ;  
 
-     public int mHeight ;  
 
-     public Dimension(){}  
 
- }  
 
 

Android如何获取系统高度、标题栏和状态栏高度,布布扣,bubuko.com
Android如何获取系统高度、标题栏和状态栏高度
原文:http://www.cnblogs.com/gtgl/p/3920660.html