专栏首页Android相关Android沉浸式状态栏与Dialog/PopupWindow兼容

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

相关文章

  • SQLite---使用触发器(Trigger)

    当数据库中的数据太多时,往往需要进行清理,将一些过时的数据删除,但是往往找不到合适的时机进行清理。于是SQLite提供了Trigger,当某些事件发生时,可以触...

    None_Ling
  • Gradle For Android(3)--管理依赖关系

    依赖关系管理是Gradle的闪光点。在这个脚本中最好的一点,就是你所需要的只是添加一行到你的build.gradle中,然后Gradle就会从一个远程仓库中下载...

    None_Ling
  • Android-LinearLayout中getChildMeasureSpec解析

    该函数的注释是:执行最难的一步:测量子View大小,测量出指定的MeasureSpec 给一个单独的子View,这个方法要计算出子View正确的HeightMe...

    None_Ling
  • ​火绒小讲堂:你真的了解【病毒查杀】嘛?Ⅱ

    上期讲到对威胁进行处理。进行扫描后,无论是选择“立即处理”还是“全部忽略”都会在安全日志中记录本次扫描的详细日志。我们可以对日志进行清除和导出。如果您对火绒的查...

    用户6477171
  • 人工智能建筑师博士,创立AIG建筑智能研究组

    ● 郑豪:AIG:Architectural Intelligence Group 是一个以学术成果立足,信息交流为主的研究团体。

    mixlab
  • Web性能优化:图片优化

    马哥linux运维 | 最专业的linux培训机构 ---- 我自己的Blog:http://blog.cabbit.me/web-image-optimiz...

    小小科
  • 裸眼3D?不,这可能是“自拍的未来”!

    11月23日,《牛津英文词典》宣布选择放弃“2020年度词汇”的评选,将2020年形容为“无法用一个单词妥帖概括的一年”。

    大数据文摘
  • Elasticsearch 聚合性能优化六大猛招

    默认情况下,Elasticsearch 已针对大多数用例进行了优化,确保在写入性能和查询性能之间取得平衡。我们将介绍一些聚合性能优化的可配置参数,其中部分改进是...

    铭毅天下
  • 独家解读 | 基于优化的对抗攻击:CW攻击的原理详解与代码解读

    论文标题:Towards Evaluating the Robustness of Neural Networks

    马上科普尚尚
  • 【Spring】Spring高级话题-@Enable***注解的工作原理

    在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的。

    谙忆

扫码关注云+社区

领取腾讯云代金券