Android原理揭秘之NavigationBar、StatusBar

来源:互联网 发布:淘宝卖家电话隐藏 编辑:程序博客网 时间:2024/06/01 18:32

前言

本人在集成weex时偶然遇到了问题,在魅族手机与华为手机上面UI显示存在问题,部分android手机可以,究其根本原因是因为有可恨的NavigationBar在其中作祟,这让我尴尬至极喽,必须将这种可恨的BUG扼杀掉~

介绍

StatusBar : 顶部状态栏

NavigationBar:底部导航栏,底部的虚拟按键;

一、判断是否存在

public static boolean checkDeviceHasNavigationBar(Context context) {    boolean hasNavigationBar = false;    Resources rs = context.getResources();    int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");    if (id > 0) {        hasNavigationBar = rs.getBoolean(id);    }    try {        Class systemPropertiesClass = Class.forName("android.os.SystemProperties");        Method m = systemPropertiesClass.getMethod("get", String.class);        String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");        if ("1".equals(navBarOverride)) {            hasNavigationBar = false;        } else if ("0".equals(navBarOverride)) {            hasNavigationBar = true;        }    } catch (Exception e) {    }    return hasNavigationBar;}

二、关闭NavigationBar

注:
虚拟按键从3.0版本以后才出现,可以换个思路,做版本判断,3.0之后在需要全屏的页面直接调隐藏虚拟键API,让系统去处理就好了。

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

三、获取底部 navigation bar 高度

private int getNavigationBarHeight() {    Resources resources = mActivity.getResources();    int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");    int height = resources.getDimensionPixelSize(resourceId);    Log.v("TAG", "Navi height:" + height);    return height;}

StatusBar 操作

获取StatusBar 高度

private int getStatusBarHeight() {    Resources resources = mActivity.getResources();    int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");    int height = resources.getDimensionPixelSize(resourceId);    Log.v("TAG", "Status height:" + height);    return height;}
4 0
原创粉丝点击