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 条评论
登录 后参与评论

相关文章

来自专栏Spring相关

创建一个Android项目

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

11340
来自专栏数据之美

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

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

44460
来自专栏Android开发指南

8.广播

379100
来自专栏tiane12

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

25060
来自专栏数据和云

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

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

38190
来自专栏wOw的Android小站

[Android] 针对生成的图片文件在系统Gallery不显示的处理

  之前遇到过一个问题,就是发现我在程序中生成一个新的 Bitmap 之后,当我打开系统的 Gallery 查看时,并没有看到新生成的图像。然而打开文件浏览器,...

10910
来自专栏calvin

docker搭建私有仓库

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

38330
来自专栏张坤的专栏

Unity编译Android的原理解析和apk打包分析

最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用A...

3K00
来自专栏封碎

ConditionVariable的用法 博客分类: Android AndroidUPOSthread

      线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步。提供了...

7920
来自专栏数据和云

Oracle 12c多租户特性详解:PDB 的出与入 InAndOut

将 Non-PDB 插入 CDB 在12c中,可以将一个非 CDB(也即NON-CDB)插入到 CDB 中,这个过程需要在只读模式下进行。 以下测试首先启动一...

31060

扫码关注云+社区

领取腾讯云代金券