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

转载 2016年06月01日 15:22:11
在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息。为以后方便,在此做个简单记录。

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

1、 屏幕区域的获取

[java] view plaincopy
  1. activity.getWindowManager().getDefaultDisplay();  
2、应用区域的获取
[java] view plaincopy
  1. Rect outRect = new Rect();  
  2. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);  
其中,outRect.top 即是状态栏高度。

3、view绘制区域获取

[java] view plaincopy
  1. Rect outRect = new Rect();  
  2. activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);  
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。

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

详细代码如下:

[java] view plaincopy
  1. public class ScreenSize extends Activity {  
  2.     private TextView mScreenSizeView ;  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_screen_size);  
  7.         mScreenSizeView = (TextView) findViewById(R.id.screen_size);  
  8.     }  
  9.   
  10.     @Override  
  11.     public void onWindowFocusChanged(boolean hasFocus) {  
  12.         super.onWindowFocusChanged(hasFocus);  
  13.         if(hasFocus){  
  14.             System.out.println("second");  
  15.             StringBuilder sb = new StringBuilder();  
  16.             Dimension dimen1 = getAreaOne(this);  
  17.             Dimension dimen2 = getAreaTwo(this);  
  18.             Dimension dimen3 = getAreaThree(this);  
  19.             sb.append("Area one : \n\tWidth: "+dimen1.mWidth + ";\tHeight: "+dimen1.mHeight);  
  20.             sb.append("\nArea two: \n\tWidth: "+dimen2.mWidth + ";\tHeight: "+dimen2.mHeight);  
  21.             sb.append("\nArea three: \n\tWidth: "+dimen3.mWidth + ";\tHeight: "+dimen3.mHeight);  
  22.             mScreenSizeView.setText(sb.toString());  
  23.         }  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean onCreateOptionsMenu(Menu menu) {  
  28.         getMenuInflater().inflate(R.menu.activity_screen_size, menu);  
  29.         return true;  
  30.     }  
  31.       
  32.     private Dimension getAreaOne(Activity activity){  
  33.         Dimension dimen = new Dimension();  
  34.         Display disp = activity.getWindowManager().getDefaultDisplay();  
  35.         Point outP = new Point();  
  36.         disp.getSize(outP);  
  37.         dimen.mWidth = outP.x ;  
  38.         dimen.mHeight = outP.y;  
  39.         return dimen;  
  40.     }  
  41.     private Dimension getAreaTwo(Activity activity){  
  42.         Dimension dimen = new Dimension();  
  43.       Rect outRect = new Rect();  
  44.       activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);  
  45.       System.out.println("top:"+outRect.top +" ; left: "+outRect.left) ;  
  46.       dimen.mWidth = outRect.width() ;  
  47.       dimen.mHeight = outRect.height();  
  48.         return dimen;  
  49.     }  
  50.     private Dimension getAreaThree(Activity activity){  
  51.         Dimension dimen = new Dimension();  
  52.      // 用户绘制区域   
  53.         Rect outRect = new Rect();  
  54.         activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);  
  55.         dimen.mWidth = outRect.width() ;  
  56.         dimen.mHeight = outRect.height();  
  57.         // end  
  58.         return dimen;  
  59.     }  
[java] view plaincopy
  1. private class Dimension {  
  2.     public int mWidth ;  
  3.     public int mHeight ;  
  4.     public Dimension(){}  
  5. }  

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

在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息。为以后方便,在此做个简单记录。 晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文...
  • xinhai657
  • xinhai657
  • 2013年11月21日 17:00
  • 51255

Android获取状态栏和标题栏的高度

1.获取状态栏高度: decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayF...
  • joychine
  • joychine
  • 2014年10月11日 18:13
  • 1888

Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取

日常开发中我们经常会因为绘图、绘制自定义组件、定位组件或者是计算布局高度需要减去状态栏高度等需要来获取Activity界面中状态栏、标题栏的高度。但很多人马上要拿起来就用还是会遇到各种各样的问题,一时...
  • feng787900247
  • feng787900247
  • 2016年12月26日 16:36
  • 963

Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取

简单说明一下(上图Activity采用默认Style,状态栏和标题栏都会显示):最大的草绿色区域是屏幕界面,红色次大区域我们称之为“应用界面区域”,最小紫色的区域我们称之为“View绘制区域”;屏幕顶...
  • a_running_wolf
  • a_running_wolf
  • 2016年01月07日 17:52
  • 53270

Android获取View 的坐标和屏幕高度、状态栏高度、标题栏高度

1.获取相对于父ViewGroup的坐标: getLeft , getTop, getBottom, getRight 2.获取相对于窗口的坐标: getLocationInWindow int[] ...
  • iplayvs2008
  • iplayvs2008
  • 2015年07月23日 13:48
  • 3252

Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取

日常开发中我们经常会因为绘图、绘制自定义组件、定位组件或者是计算布局高度需要减去状态栏高度等需要来获取Activity界面中状态栏、标题栏的高度。但很多人马上要拿起来就用还是会遇到各种各样的问题,一时...
  • yzyssg1
  • yzyssg1
  • 2017年06月06日 22:38
  • 306

Android学习笔记之屏幕宽高、状态栏宽高、标题宽高以及left()、top()、right()、bottom()

Android学习笔记之屏幕宽高、状态栏宽高、标题宽高以及left()、top()、right()、bottom()前言:  想学号安卓,这几个方法及属性你不得不学会怎么获取,当你学会了如何获取屏幕宽...
  • qq_27630169
  • qq_27630169
  • 2016年09月24日 00:22
  • 1597

Android(13)——获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度 .

原文地址:获取Android屏幕尺寸、控件尺寸、状态栏/通知栏高度、导航栏高度 .   1.获取Android屏幕尺寸 我们可以通过getSize()方法获得屏幕的尺寸: Display di...
  • zizidemenghanxiao
  • zizidemenghanxiao
  • 2015年11月16日 16:57
  • 1107

安卓高级9 沉浸式布局 获取状态栏高度等

Android 沉浸式状态栏、状态栏一体化、透明状态栏、仿iOS透明状态栏 http://blog.csdn.NET/jdsjlzx/article/details/50437779注:状态栏的字体颜...
  • qfanmingyiq
  • qfanmingyiq
  • 2016年10月27日 17:00
  • 3472

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

获取顶部status bar 高度 private int getStatusBarHeight() {     Resources resources = mActivity.getResource...
  • u012264122
  • u012264122
  • 2016年05月24日 14:44
  • 854
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android获取屏幕高度、状态栏高度、标题栏高度
举报原因:
原因补充:

(最多只允许输入30个字)