• Android如何获取系统高度、标题栏和状态栏高度


    在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 :  Width: "+dimen1.mWidth + "; Height: "+dimen1.mHeight);  
    20.             sb.append(" Area two:  Width: "+dimen2.mWidth + "; Height: "+dimen2.mHeight);  
    21.             sb.append(" Area three:  Width: "+dimen3.mWidth + "; Height: "+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. }  

    请注明出处,此文档来自“善思善学”。
  • 相关阅读:
    操作系统学习笔记:银行家算法的回顾和训练
    操作系统学习笔记:内存学习随笔
    操作系统笔记:内存的连续管理
    操作系统笔记:内存的离散管理
    操作系统:内存管理复习ing之页面置换算法
    马原学习日记1:实践
    bootstrap简单教程
    css-6(媒体识别)
    css-5(弹性盒子)
    css-3(旋转+过渡)
  • 原文地址:https://www.cnblogs.com/gtgl/p/3920660.html
Copyright © 2020-2023  润新知