标签:
//--------------------------------------------------------------------------------------------
// 作者:longtian635241
// 发布日期:2015-08-25
// 最后修改:2015-08-25
//http://blog.csdn.net/longtian635241
//----------------------------------------------------------------------------------------------
1、android4.0开始应用中有提供API:view的setSystemUiVisibility(int
visibility)方法实现动态操作状态栏;
这个借口的本意是提供给我们看视频时一段时间不操作而全屏,但触摸导航栏又出来了!(入口怀疑是被系统劫持了触摸事件)
2、网上也有用广播去隐藏导航栏的,具体没有测试如:
http://blog.csdn.net/hdwslss/article/details/39497519
3、永久隐藏的方法
3.1 在/system/build.prop或default.prop中添加
qemu.hw.mainkeys=1
3.2 修改Z:\wk\myandroid\frameworks\base\core\res\res\values\config.xml(原始系统)如我的平台为freescale的imx6dq,修改Z:\wk\myandroid\device\fsl\sabresd_6dq\overlay\frameworks\base\core\res\res\values\config.xml中的
<bool name="config_showNavigationBar">true</bool>将true改为false!
4、动态隐藏修改
4.1 systemUI.apk启动过程:http://blog.csdn.net/andyhuabing/article/details/12851825
4.2 最后确定frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java,在调用setSystemUiVisibility后会调用private
int updateSystemUiVisibilityLw()其在finishPostLayoutPolicyLw中调用!可以看到隐藏状态栏的代码!
4.3 寻找劫持触摸事件,由按键知道一般会在interceptKeyBeforeDispatching去劫持分发,但是么有发现和导航栏有关的信息,再次搜所输入事件接收器InputEventReceiver,这是我们发现HideNavInputEventReceiver这个类,它就是劫持输入事件的类!在其下面初始化了一个变量:
final InputEventReceiver.Factory mHideNavInputEventReceiverFactory
=
new InputEventReceiver.Factory() {
@Override
public InputEventReceiver createInputEventReceiver(
InputChannel inputChannel, Looper looper) {
return new HideNavInputEventReceiver(inputChannel, looper);
}
};
上面变量的使用在:
public void beginLayoutLw(boolean isDefaultDisplay, int displayWidth,
int displayHeight,
int displayRotation) {
。。。。。。。。。。。。。。。。。。
if (navVisible) {
if (mHideNavFakeWindow != null) {
mHideNavFakeWindow.dismiss();
mHideNavFakeWindow = null;
}
} else if (mHideNavFakeWindow == null) {
mHideNavFakeWindow = mWindowManagerFuncs.addFakeWindow(
mHandler.getLooper(), mHideNavInputEventReceiverFactory,
"hidden nav", WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER,
0, false, false, true);//此处被调用
}
// For purposes of positioning and showing the nav bar, if we have
// decided that it can‘t be hidden (because of the screen aspect ratio),
// then take that into account.
navVisible |= !mCanHideNavigationBar;
。。。。。。。。。。。。。。
}
当然很自然到注释他,果然注释即可!
5、FakeWindow扩展
http://m.blog.csdn.net/blog/sundesheng125/24478833
其他参考资料:
http://www.cnblogs.com/android100/archive/2012/06/20/2556577.html
http://www.myexception.cn/android/1307491.html
http://blog.csdn.net/chenqian_lj/article/details/17719903
http://blog.csdn.net/chaihuasong/article/details/31741659
http://blog.csdn.net/chenqian_lj/article/details/22388367
版权声明:本文为博主原创文章,未经博主允许不得转载。
android4.3 SDK控制动态显示导航栏(NavigationBar)
标签:
原文地址:http://blog.csdn.net/longtian635241/article/details/47981603