Android原理揭秘之NavigationBarStatusBar
Posted 王永迪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android原理揭秘之NavigationBarStatusBar相关的知识,希望对你有一定的参考价值。
前言
本人在集成weex时偶然遇到了问题,在魅族手机与华为手机上面UI显示存在问题,部分android手机可以,究其根本原因是因为有可恨的NavigationBar在其中作祟,这让我尴尬至极喽,必须将这种可恨的BUG扼杀掉~
介绍
StatusBar : 顶部状态栏
NavigationBar:底部导航栏,底部的虚拟按键;
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的主要内容,如果未能解决你的问题,请参考以下文章