对于Android任务栏的隐藏问题确实纠结了很久,最近公司平板设备(Android 4.2)遇到这个需求,所以只能硬着头皮搞定了。
需求如下:
当App操作端(以下简称App)显示时,隐藏导航栏;
当App退出时显示导航栏;
尽量不改变原系统相应实现;
涉及模块,
1:PhoneWindowManager
2:SystemUI
3:App操作端
修改说明:
第一步:修改frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
在Android 4.2中提供原生隐藏导航栏的方式:
View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | //隐藏导航栏
View.SYSTEM_UI_FLAG_FULLSCREEN //程序全屏
);
此种方式适合在用户播放视频时使用,但是这种方式在隐藏任务栏时系统会自动在所有窗口之上置顶显示一个透明窗口FakeWindow,并监听用户操作事件,所以当用户触摸屏幕会导致任务栏自动出现。
所以实现我们的需求就需要在隐藏任务栏时禁止FakeWindow显示。
修改如下:
frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java Line2657~2660
修改为:
- 第二步 应用示例
App启动全屏:
protected void onResume(){
super.onResume();
hiddenbar.setSystemUiVisibility(
SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
}
App关闭恢复任务栏显示:
博主自己作品推荐:
西谷盒子:自带公网IP、即插即用、全端口开放、花生壳替代品
https://cigobox.taobao.com