Android如何获取系统高度、标题栏和状态栏高度
16lz
2021-01-24
在android应用中,有时需要计算个View的位置,导致需要计算状态栏高度,标题栏高度等信息。为以后方便,在此做个简单记录。
晒代码前先了解一下android屏幕区域的划分,如下图(该图引用自此文http://www.iteye.com/topic/828830)
1、屏幕区域的获取
[java] view plain copy- activity.getWindowManager().getDefaultDisplay();
2、应用区域的获取
[java] view plain copy- RectoutRect=newRect();
- activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
其中,outRect.top 即是状态栏高度。
3、view绘制区域获取
[java] view plain copy- RectoutRect=newRect();
- activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
用绘制区域的outRect.top - 应用区域的outRect.top 即是标题栏的高度。
注意: 如果刚启动Activity时就要计算这些数据,最好在onWindowFocusChanged 函数中进行, 否则得到的某些数据可能是错误的,比如,应用区域高宽的获取。
详细代码如下:
[java] view plain copy- publicclassScreenSizeextendsActivity{
- privateTextViewmScreenSizeView;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_screen_size);
- mScreenSizeView=(TextView)findViewById(R.id.screen_size);
- }
- @Override
- publicvoidonWindowFocusChanged(booleanhasFocus){
- super.onWindowFocusChanged(hasFocus);
- if(hasFocus){
- System.out.println("second");
- StringBuildersb=newStringBuilder();
- Dimensiondimen1=getAreaOne(this);
- Dimensiondimen2=getAreaTwo(this);
- Dimensiondimen3=getAreaThree(this);
- sb.append("Areaone:\n\tWidth:"+dimen1.mWidth+";\tHeight:"+dimen1.mHeight);
- sb.append("\nAreatwo:\n\tWidth:"+dimen2.mWidth+";\tHeight:"+dimen2.mHeight);
- sb.append("\nAreathree:\n\tWidth:"+dimen3.mWidth+";\tHeight:"+dimen3.mHeight);
- mScreenSizeView.setText(sb.toString());
- }
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- getMenuInflater().inflate(R.menu.activity_screen_size,menu);
- returntrue;
- }
- privateDimensiongetAreaOne(Activityactivity){
- Dimensiondimen=newDimension();
- Displaydisp=activity.getWindowManager().getDefaultDisplay();
- PointoutP=newPoint();
- disp.getSize(outP);
- dimen.mWidth=outP.x;
- dimen.mHeight=outP.y;
- returndimen;
- }
- privateDimensiongetAreaTwo(Activityactivity){
- Dimensiondimen=newDimension();
- RectoutRect=newRect();
- activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
- System.out.println("top:"+outRect.top+";left:"+outRect.left);
- dimen.mWidth=outRect.width();
- dimen.mHeight=outRect.height();
- returndimen;
- }
- privateDimensiongetAreaThree(Activityactivity){
- Dimensiondimen=newDimension();
- //用户绘制区域
- RectoutRect=newRect();
- activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect);
- dimen.mWidth=outRect.width();
- dimen.mHeight=outRect.height();
- //end
- returndimen;
- }
- privateclassDimension{
- publicintmWidth;
- publicintmHeight;
- publicDimension(){}
- }
更多相关文章
- Android(安卓)自定义WheelView滚动控件
- Android中软键盘监听
- 添加自定义风格的titleBar栏
- 获取手机屏幕宽高、分辨率等信息
- android中打印函数调用栈、内存使用、屏幕分辨率
- android 获取手机屏幕分辨率和setRequestedOrientation设置屏幕
- 超简单实现Android(安卓)屏幕截屏(需要系统级权限)
- android 获取view在屏幕中的位置
- Android唤醒屏幕按键