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);

  • 相关阅读:
    Python基础笔记:线程与进程
    Python爬虫笔记:爬取豆瓣图书TOP250单页数据
    Python爬虫笔记:爬取单个页面
    【转】WCHAR,CHAR,TCHAR的区别
    CString转换为LPSTR和LPSTR转化为CString
    关于反射调用方法的一个log
    Java框架的思考
    Java中反射性能测试
    oracle extend
    ubuntu maven环境安装配置
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3186931.html
Copyright © 2011-2022 走看看