美文网首页
NavigationBar获取宽高与是否显示

NavigationBar获取宽高与是否显示

作者: 9dfaf364d57f | 来源:发表于2018-01-05 22:52 被阅读27次

NavigationBar可以说是我认为安卓中最丑陋的一块,即图中底部三个虚拟按钮(back、home、menu)


开发过程中,有时需要检测虚拟按键的高度,进行屏幕适配,获取其高度和判断其是否可见:

public boolean isNavigationBarShow(){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        Point realSize = new Point();
        display.getSize(size);
        display.getRealSize(realSize);
        return realSize.y!=size.y;
    }else {
        boolean menu = ViewConfiguration.get(this).hasPermanentMenuKey();
        boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
        if(menu || back) {
            return false;
        }else {
            return true;
        }
    }
}

public static int getNavigationBarHeight(Activity activity) {
    if (!isNavigationBarShow(activity)){
        return 0;
    }
    Resources resources = activity.getResources();
    int resourceId = resources.getIdentifier("navigation_bar_height",
            "dimen", "android");
    //获取NavigationBar的高度
    int height = resources.getDimensionPixelSize(resourceId);
    return height;
}

此段代码已在荣耀V9、荣耀畅玩5检验。

getRealSize、getSize作用和区别(查看源码注释得知,单位像素):
(1)getRealSize获取显示器的实际尺寸,不减少任何窗口的装饰
(2)getSize()获取的值并不一定是最真实的大小,受系统装饰元素或所属的窗口管理器影响而有所不同。

相关文章

网友评论

      本文标题:NavigationBar获取宽高与是否显示

      本文链接:https://www.haomeiwen.com/subject/ihmsnxtx.html