一、实现沉浸式状态栏

1、实现Activity沉浸式体验

1)先封装实现一个专门设置沉浸式的类

public class ImmersiveModeUtils {public static void setImmersiveMode(final View contentView){if (Build.VERSION.SDK_INT >= 19) {//先调用一次,设置沉浸contentView.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);contentView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener(){//状态栏可见性变化时候,会回调public void onSystemUiVisibilityChange(int visibility){contentView.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);}});}}
}

2)在基类BaseActivity的onCreate方法中调用一下以下代码即可,其他Activity继承于BaseActivity

 //设置沉浸式
ImmersiveModeUtils.setImmersiveMode(getWindow().getDecorView());

经过上述两步,正常来说已经实现了沉浸式状态栏效果了,但是在显示Dialog或者PupoWindow时候,状态栏/导航栏还是会显示出来,这显然没有满足我们沉浸式体验的需求

2、实现Dialog沉浸式体验

1)dialog要实现沉浸式,需要在show之前,先让dialog不要获取焦点,在show之后,再给dialog所在的window设置沉浸式代码,并恢复焦点

 @Overridepublic void show() {//先让对话框失去焦点,这样才不会在对话框弹出来时候,沉浸式效果被破坏,导致导航栏显示出来this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);super.show();//显示之后,给dialog所在的window设置沉浸式,并重新获取焦点ImmersiveModeUtils.setImmersiveMode(getWindow().getDecorView());this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);}

3、实现PopuWindow沉浸式体验

1)在popuwindow显示之前,先设置不获取焦点(popuwindow不获取焦点时候,是可以点击被它所遮挡的控件的)
有两种方式可以设置,一种是创建时候设置:

 PopupWindow(View contentView, int width, int height, boolean focusable)

另一种是创建好PopupWindow对象之后,调用 mPopupWindow.setFocusable(false);设置

2)然后在popuwindow show之后再重新设置可以获取焦点,记得不要忘记调用update来更新,否则修改不生效

 //等popuwindow显示出来再设置获取焦点,避免显示那会弹出导航栏
mPopupWindow.setFocusable(true);
mPopupWindow.update();

3)接着对popuwindow也设置沉浸式体验

 //设置才不会在弹出来时候显示虚拟状态栏/导航栏
ImmersiveModeUtils.setImmersiveMode(mPopupWindow.getContentView());

完成上述3步,popuwindow也完美支持沉浸式状态栏效果

Android 实现沉浸式体验相关推荐

  1. android 沉浸式_【沉浸式体验】投影秀科技与视觉:体验亦真亦幻的超常感受

    沉浸式投影作为一种新型的交互方式 受大众关注 全面覆盖观众视角 展现给参与者带来了亦真亦幻的超常感受 为参与者带来身临其境的体验感 投影秀科技与视觉+美学的结合 让你的活动与众不同 一起体验投影秀的魅 ...

  2. Android的沉浸式状态栏与变色状态栏详解

    此文章装载至http://www.androidchina.net/3520.html点击打开链接 一. 首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式 ...

  3. 【有美女看】提升用户体验,你不得不知道的事儿——巧用全屏与沉浸式体验,让用户更舒心~...

    最近公司项目中要求写一个视频直播录像及视频观看的功能,额,就本能地去看了一波当下主流的一些视频类APP,发现在爱奇艺等播放器中,在播放视频的时候都是fullScreen的,而这个在各大手游中也体现的比 ...

  4. 云XR平台支持沉浸式体验应用快速落地

    近日,阿里云与平行云联合发布云 XR 平台,降低云端视觉计算应用的开发门槛,加速数字孪生.虚拟人.虚拟现实.沉浸式体验与虚拟仿真平台等 XR 应用落地,帮助互联网.新零售.社交.工业.交通.城市管理等 ...

  5. Android实现沉浸式(透明)状态栏适配

    第一种讲解: 在Android系统4.4以前,状态栏的背景色和字体颜色都是不能改变的.但是4.4以后Google增加了改变状态栏背景透明的方法,可以通过两种方式来设置. 直接在Activity中设置W ...

  6. Android studio 沉浸式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/51763825 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  7. “沉浸式”体验?异形屏适配?我把他们扒光了明明白白告诉你应该这样做

    看似复杂的沉浸式体验设计,其实也就是在处理以下两个 System UI与用户布局(setContentView)之间说不清理还乱的关系: StatusBar 系统状态栏 NavigationBar 系 ...

  8. Android状态栏沉浸式模式读卡器多种技巧

    其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先发起的.因为Android官方从来没有给出过沉浸式状态栏这样的命名,只有沉浸式模式(Immersive Mode)这种说法.而有些人 ...

  9. VR全景为家装赋能,沉浸式体验家装设计效果

    房子.车子是我们目前难以解决的两大难题,很多人需要两代人的努力才能够买一套房子,然后还得经历等待交房.进行装修等一大堆事情才能住进去.尤其是室内装修,很多人都是有着痛苦的经历的,因为自己忙前忙后,结果 ...

  10. 将渲染计算搬到云端,开启低成本、强交互、沉浸式体验

    云渲染可以解放本地计算需求,这意味着生产力的大幅提升. 云渲染的基本原理是将3D渲染应用部署到云端,接收本地的控制指令发送到云端,云端启动游戏引擎并进行画面渲染,编码成视频流传输到本地. 不难看出,云 ...

最新文章

  1. 使用标准模板find函数来对结构体容器进行查找
  2. Python之sklearn-pandas:sklearn-pandas库函数的简介、安装、使用方法之详细攻略
  3. RTA广告能力的应用场景剖析
  4. 人脸识别技术如何应用到美颜领域?
  5. Java 算法 P1003
  6. java url转成pdf_java URL转PDF文件
  7. Ubuntu16.04上使用Anaconda3的Python3.6的pip安装UWSGI报错解决办法
  8. 电脑网络禁用了怎么恢复_Tenorshare UltData for Mac(iOS数据恢复备份软件)v9.4.1中文激活版_软件动态论坛...
  9. python word转pdf linux_在Linux系统中把Pdf转化成word文档的软件
  10. 浏览器transform介绍
  11. 10 个用于 Linux 的开源轻量级 Web 浏览器
  12. 二级mysql真题2019_2019年9月二级MySQL试题(汇总)
  13. 利用Promise彻底解决微信小程序云函数因运行时间过长返回result,underfined为空的方法
  14. Css3中添加-moz-, -webkit-, -o-,是什么意思呢?
  15. iOS开发:GitHub上传代码错误提示fatal: Authentication failed for 'https://gitee.com/XXX/XXX.git/‘的解决方法
  16. (区块链溯源)基于Hyperledger Fabric 区块链的产品溯源( 化妆品 )
  17. 秘密是如何被泄露的?自建文件分享神器HFS
  18. Java 当前日期判断节假日
  19. Android 集成百度身份证识别
  20. 2018《财富》世界500强出炉,比500强更多的财富在这里!—创成汇

热门文章

  1. 【听说隔壁老王开始学编程了?】
  2. Windows上查看MTU值和修改MTU的方法
  3. GroupByKey VS ReduceByKey
  4. ant design vue 中a-tree搜索查询
  5. 想知道直销银行账户吗?
  6. linux wrf软件安装,wrf安装
  7. mysql中floor的用法_Mysql报错注入之floor报错详解
  8. 08-词嵌入(Word embeddings)
  9. 读《华为“打工皇帝”徐家骏的十年感悟》的心志提升
  10. android retrofit实例,Retrofit使用步骤