Android原理揭秘之NavigationBarStatusBar

Posted 王永迪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android原理揭秘之NavigationBarStatusBar相关的知识,希望对你有一定的参考价值。

前言

本人在集成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;
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于Android原理揭秘之NavigationBarStatusBar的主要内容,如果未能解决你的问题,请参考以下文章

Android之SystemUI载入流程和NavigationBar的分析

分布式事务之底层原理揭秘

Android技术揭秘之activity堆栈管理

抖音头条为什么这么火?揭秘推荐系统原理之协同过滤算法

Mysql索引原理揭秘之——MyISAM和InnoDB

设计模式之代理:手动实现动态代理,揭秘原理实现