安卓开发之沉浸模式

      有时我们写了一个APP,但是我们不希望该APP运行时还显示着手机状态栏,以及导航栏,APP的标题栏等。这些都会大量占据着我们APP的空间位置,影响用户体验,那么我们大部分时间都希望能够使得APP运行时处于全屏状态,特别是游戏型APP以及视屏类APP,去除状态栏、导航栏以及标题栏都是我们每个activity需要干的一件事。那么我们如何才能隐藏折三个部分呢?       安卓API 19或者以上提供了一个沉浸模式,该模式可以较好地帮助我们解决这个问题。但是若是API版本为19以下的能否隐藏这些呢?答案是可以的,废话不多说,直接上代码。

      在activity的OnCreat()方法里面在setContentView(R.layout.activity_main)之前加上这一段代码可以隐藏APP自身的标题栏。

this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题

      同样在setContentView(R.layout.activity_main)加上这一句可以使得activity强制横屏/竖屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏

     在activity的OnCreat()方法里面在setContentView(R.layout.activity_main)之前加上这一段代码可以隐藏系统的状态栏。

View decorView = getWindow().getDecorView();
    	decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);  //隐藏状态栏

    以上的隐藏状态栏是针对于API 版本在19以下的做法,这样有一个缺点,就是隐藏的状态栏当再次被用户呼叫出来之后不会自动隐藏。而API 19及以上的版本提供了沉浸模式,正好可以完美解决这一个问题,沉浸模式下当状态栏被呼出之后过一段时间无操作将会自动隐匿起来,就是我们平时玩游戏时的体验。

    我们知道,该模式只支持19或以上的版本的,但是一个APP应该是兼容性的,不应该只适用于19及以上的版本,这时我们可以利用以上的两种隐匿结合,判断手机的API版本,自动选择隐匿方式。

    下面给出沉浸模式的代码,通过判断是否获取到焦点以及版本是否在19及之上,是的话将会自动进入沉浸模式。大致讲解一下沉浸模式,首先调用getWindow().getDecorView()方法获取到了当前界面的DecorView,然后调用它的setSystemUiVisibility()方法来设置系统UI元素的可见性。其中,各个View.SYSTEM_UI_FLAG的作用如下:

SYSTEM_UI_FLAG_FULLSCREEN表示全屏的意思

SYSTEM_UI_FLAG_LAYOUT_STABLE   //加上该局之后布局将不会占用状态栏的空间,意思就是说状态栏隐藏之后状态栏将不显示任何东西,是一个黑框

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏导航栏

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION   //不隐藏导航栏,布局延伸到导航栏位置

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  //不隐藏状态栏,布局延伸到状态栏

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY    //自动重新隐藏

@Override
    public void onWindowFocusChanged(boolean hasFocus) {              //进入沉浸模式,即自动隐藏状态栏以及导航栏
        super.onWindowFocusChanged(hasFocus);
        //判断是否有焦点
        if(hasFocus && Build.VERSION.SDK_INT >= 19){
            View decorView = 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
            );

        }
    }


猜你喜欢

转载自blog.csdn.net/FDGFGFDGFD/article/details/80373978