有时候针对一个视频播放页面,需要将NavigationBar隐藏掉,这样有更加好的用户体验。我最近在做ExoPlayer相关的一个视频播放的需求,发现默认情况下,这个Player是没有隐藏掉NavigationBar的,这就导致了在点击屏幕暂停播放的时候,会拉伸缩放视频比例,上下留有黑边。等到NavigationBar被隐藏的时候,视频又会重新填充进整个屏幕。体验不是很好,所以需要改造一下NavigationBar。

原理很简单,就是通过获取getWindow().getDecorView(),然后设置setSystemUiVisibility就可以实现。但是要注意API版本,直接看代码片段。

protected void hideBottomUIMenu(){
    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if (Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        View decorView = getWindow().getDecorView();
        int uiOptions = 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 // hide nav bar
                | View.SYSTEM_UI_FLAG_IMMERSIVE;
        decorView.setSystemUiVisibility(uiOptions);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
}