Android沉浸式状态栏与Dialog/PopupWindow兼容

背景

在使用某APP的过程中发现,该APP对PopupWindow的沉浸式支持并不好,在使用PopupWindow的时候,状态栏会变成纯白色,看不到时间信号等等。如下图所示

APP弹出菜单时候状态栏底色纯白

而正常的状态栏应该如下图所示

正常情况下状态栏显示

问题追踪

看到这个之后觉得顶部看不到时间、信号神马的非常不舒服,于是上Google查了一下原因。后来终于在StackOverFlow上找到一些信息:

http://stackoverflow.com/questions/22794049/how-to-maintain-the-immersive-mode-in-dialogs/23207365#23207365

其中的有一句话: Set the dialog to not focusable (makes navigation ignore us adding the window) 设置Dialog没有焦点,使得状态栏忽略新添加的Window

这样就能可以实现状态栏在PopupWindow/Dialog弹出的时候,也可以正常显示了,在自己做的Demo中也证实了这一点

解决办法

在PopupWindow/Dialog展示(show)之前,调用setFocusable(false),这样在弹出PopupWindow的时候没有焦点,就不会影响沉浸式状态栏的显示了。

遗留问题

因为Android底部有虚拟按键,上网查资料发现都说需要设置Popup的WindowInputMethod,但是发现和预期不一样,会导致虚拟按键的位置有问题,所以,暂时没有解决方案,最后还是通过View树动态的addView和removeView来实现PopupWindow的效果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android开发指南

8.广播

35410
来自专栏calvin

docker搭建私有仓库

紧接上一篇镜像发布到官方之后,我们来搭建我们自己的私有仓库,比较,如果真的要在生产环境使用的话,这是必须的。 首先,我们来准备一下搭建私有仓库所需要的信息。

1893
来自专栏数据和云

Oracle 12.2 新特性 | PDB不同字符集变更深入解析

从12c版本12.1开始,就有了新特性——Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Data...

3529
来自专栏进击的君君的前端之路

webpack

1412
来自专栏tiane12

Android开发错误 The method onClick(View) of type new View.OnClickListener(){} must override a superclas解

2396
来自专栏数据之美

linux 系统监控、诊断工具之 lsof 用法简介

1、lsof 简介 lsof 是 linux 下的一个非常实用的系统级的监控、诊断工具。 它的意思是 List Open Files,很容易你就记住了它是 “...

3916
来自专栏ASP.NET MVC5 后台权限管理系统

.Net 转战 Android 4.4 日常笔记(3)--目录结构分析

看了创建项目后,出现的文件夹很多确实有点晕,不过经过简单的了解还是跟我们asp.net的目录有点相识滴。 ? 下面这张图,概括了主要的文件用途。其实也只需要了解...

1846
来自专栏封碎

Android获取外部和内部存储空间总大小和可用大小 博客分类: Android小技巧 AndroidLinuxOSCache

      android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空...

1821
来自专栏肖蕾的博客

关于Android开发中遇到的内存不够的情况

1002
来自专栏Spring相关

创建一个Android项目

Generate Layout File勾选的话会默认创一个默认的布局,launcher Activity只的是把当前的类当做主活动

914

扫码关注云+社区