zoukankan      html  css  js  c++  java
  • Android开发之有效获取状态栏(StatusBar)高度

    获取状态栏高度

    一、传统方式:有时获取为0,解决方法看  二

     

    1
    2
    3
    4
    
    代码
    Rect frame = new Rect();   
    getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);   
    int statusBarHeight = frame.top;  

    二、4.0.3之后可能获取为0

     

     
    public int getBarHeight(){
            Class<?> c = null;
            Object obj = null;
            Field field = null;
            int x = 0, sbar = 38;//默认为38,貌似大部分是这样的
    
            try {
                c = Class.forName("com.android.internal.R$dimen");
                obj = c.newInstance();
                field = c.getField("status_bar_height");
                x = Integer.parseInt(field.get(obj).toString());
                sbar = getResources().getDimensionPixelSize(x);
    
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            return sbar;
        }

    //---------------------------------------------


    1.获取状态栏高度:

    decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。
    于是,我们就可以算出状态栏的高度了。

    1
    2
    3
    4
    
    代码
    Rect frame = new Rect();   
    getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);   
    int statusBarHeight = frame.top;  
    

    有时候获取到的高度是0,可以用另一种方法获取

    在源码程序中获取状态栏高度代码:

    height= getResources().getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);

    1
    2
    3
    4
    5
    6
    代码
    class c = Class.forName("com.android.internal.R$dimen");
    Object obj = c.newInstance();
    Field field = c.getField("status_bar_height");
    int x = Integer.parseInt(field.get(obj).toString());
    int y = getResources().getDimensionPixelSize(x);
    

    2.获取标题栏高度:

    getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。

    1
    2
    3
    4
    
    代码
    int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();   
    //statusBarHeight是上面所求的状态栏的高度   
    int titleBarHeight = contentTop - statusBarHeight  
    
    

    3.获取屏幕高度
    方法 1.

    Java代码

    1
    2
    3
    4
    5
    
    代码
    WindowManager windowManager = getWindowManager();   
    Display display = windowManager.getDefaultDisplay();   
    screenWidth = display.getWidth();   
    screenHeight = display.getHeight();  
    

    方法 2.

    1
    2
    3
    4
    5
    
    Java代码  
    DisplayMetrics dm = new DisplayMetrics();   
    this.getWindowManager().getDefaultDisplay().getMetrics(dm);//this指当前activity   
    screenWidth =dm.widthPixels;   
    screenHeight =dm.heightPixels;  
    

    以上两种方法在屏幕未显示的时候,还是处于0的状态,即要在setContentView调用之后才有效。

    设置为无标题

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    设置为全屏模式getWindow().setFlags
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    设置为横屏
    setRequesteOrientation(ActivityInfo.SCREEN_ORIENTATION_LADSCAPE);

  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3186931.html
Copyright © 2011-2022 走看看