Android沉浸式模式

官方称沉浸式状态栏为沉浸式模式。

  • 什么是沉浸式?
    沉浸式就是让人专注当前的(由设计者营造)情境下感到愉悦和满足,而忘记真实的情境。

  • 什么是Android中的沉浸式?
    当启用该模式,应用程序的界面将占据整个屏幕,自动隐藏系统的状态栏和导航栏,让应用程序内容可以在最大显示范围呈现,增加大屏体验,而当需要查看通知的时候只需要从顶部向下滑动就能呼出通知栏。

  • 一个应用程序界面有有如下元素:


  • 而打造沉浸式模式的用户体验就是要将这些系统元素全部隐藏,只留下主题内容部分。先看一下效果图:


进入程序时,自动隐藏了状态栏和导航栏。当用户从顶部向下滑动就能呼出半透明的状态栏和导航栏。

具体代码如下:

public class MainActivity extends AppCompatActivity {        protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }        public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        View mDecorView = getWindow().getDecorView();        mDecorView.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 // hide nav bar                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY        );    }}
  • 上面使用的SYSTEM_UI_FLAG_IMMERSIVE_STICKY官方称为粘性沉浸式模式。View.SYSTEM_UI_FLAG_IMMERSIVE为非粘性沉浸式,非粘性沉浸式状态栏和导航栏显示后不再自动隐藏。

注意:onWindowFocusChanged方法里面的代码不能直接写在onCreate方法中,如果这么写当应用处于后台Stoped状态,下次启动应用便执行不到处理沉浸式的代码。Activity生命周期中,真正的visible时间点是onWindowFocusChanged()函数被执行时,所以我们将这段代码写在这个方法中。

可以参考官方文档:https://developer.android.google.cn
中文翻译版:http://hukai.me/android-training-course-in-chinese

其他常见状态栏和导航栏效果

  • 隐藏ActionBar
ActionBar actionBar = getSupportActionBar();actionBar.hide();

上面的代码需要在放在setContentView方法之前,否则会出现ActionBar显示后再隐藏。如果整个应用没有用到ActionBar我们可以直接在AndroidManifest.xml中将application的theme设置为NoActionBar,如果只是某个activity不用也可以将这个activity的theme设置为NoActionBar。

                             

效果图如下:

  • 透明状态栏和导航栏
//透明状态栏和导航栏,隐藏ActionBargetSupportActionBar().hide();getWindow().getDecorView().setSystemUiVisibility(    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);getWindow().setNavigationBarColor(Color.TRANSPARENT);getWindow().setStatusBarColor(Color.TRANSPARENT);

效果图如下:

更多相关文章

  1. Android中点击空白区域控件自动隐藏(事件传递机制中的一个小例子)
  2. [置顶] 解决android某些应用开发某些类无法解析/找到的问题--使
  3. android实现登录,Login姿势对不对?
  4. android源代码分析一:使用内部(com.android.internal)和隐藏(@hid
  5. Android(安卓)应用中十大导航设计错误
  6. Android(安卓)侧拉选择框
  7. Android高仿微信联系人字母导航栏的实现
  8. 在Android中如何通过点击edittext之外的部分使软键盘隐藏
  9. Android隐藏标题栏及解决启动闪过标题的实例详解

随机推荐

  1. android中视频播放的处理
  2. 理解 Android(安卓)Build 系统
  3. android中文api(79)――Gallery
  4. 特效--------圆角 倒影
  5. 做了一个手机上的直播系统
  6. Android(安卓)点击back键两次退出程序
  7. android sqlite数据库封装 实现crud
  8. android对象池之Message
  9. AIDL跨进程通信的使用
  10. Android/OPhone开发完全讲义