--- by Blue.Wu
背景:近期笔者在某款app时,需求要对导航栏(返回,home键,recent键的那部分)进行隐藏,此外还要做相关操作的屏蔽避免导航栏恢复显示。原本的方案是通过发广播给system ui,在system ui做remove导航栏的操作实现。后来架构设计阶段评估该方案对于外部模块的耦合太强,因此希望对方案进行优化,要求只在app自身做改动就可以实现。经过一番折腾完成之后,特将一些心得整理出来供参考。
心得1. 如何在不拉伸主要显示区域情况下,隐藏导航栏和状态栏。
笔者原本采用如下代码实现隐藏效果:
View decorView = activity.getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
|View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
实践后发现虽然能实现隐藏状态栏和导航栏,但会出现原有显示区域的布局被拉伸的情况。这与我们的要求不相符,详细研究View的setSystemUiVisibility方法可以传入的flag的含义和用法如下:
1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。
2. View.INVISIBLE:隐藏状态栏,同时Activity