Android N上Popwindow显示位置不正确问题「建议收藏」

Android N上Popwindow显示位置不正确问题「建议收藏」Popwindow是Android应用开发过程中比较常用的一个组件,最近发现了在AndroidN(Android7.0)上Popwindow的一个位置显示问题,使用showAsDropDown或者是showAtLocation来显示Popwindow,Popwindow总是顶到了屏幕顶部,而不是在设置的指定控件下方显示,而在Android6.0及其他系统上显示正常。如图所示:mPopu


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Popwindow是Android应用开发过程中比较常用的一个组件,最近发现了在Android N(Android 7.0,7.1)上Popwindow的一个位置显示问题,当指定PopupWindow高度为MATCH_PARENT时使用showAsDropDown或者是showAtLocation来显示Popwindow,Popwindow总是顶到了屏幕顶部,而不是在设置的指定控件下方显示,而在Android 6.0及6.0以下系统上显示正常。
如图所示:

mPopupWindow.showAsDropDown(mBtn);

Android 6.0及以下系统上正常显示(在指定的控件的下发显示):

Android N上Popwindow显示位置不正确问题「建议收藏」

Android N(7.0)以及 上显示不正常不论怎么设置总是顶到屏幕顶部):

Android N上Popwindow显示位置不正确问题「建议收藏」

经过查找资料,发现这是Android N上Popwindow的一个Bug。可以通过如下方法来解决:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // Android 7.x中,PopupWindow高度为match_parent时,会出现兼容性问题,需要处理兼容性
                int[] mLocation = new int[2];
                mBtn.getLocationInWindow(mLocation);
                int offsetY = mLocation[1] + mBtn.getHeight();
                if (Build.VERSION.SDK_INT >= 25) { // Android 7.1中,PopupWindow高度为 match_parent 时,会占据整个屏幕
                    //故而需要在 Android 7.1上再做特殊处理
                    int screenHeight = DisplayUtil.getScreenHeight(MainActivity.this); // 获取屏幕高度
                    mPopupWindow.setHeight(screenHeight - offsetY); // 重新设置 PopupWindow 的高度
                }
                mPopupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, offsetY);
            } else {
                mPopupWindow.showAsDropDown(mBtn);
            }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196998.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 简易计算器页面

    简易计算器页面

    2021年11月30日
  • 博客备份工具——小收集

    博客备份工具——小收集打算长期写原创博客了,当然也就要考虑备份问题了。虽然服务器很稳定,但是一旦出什么差错,技术类的东西丢了真的很难恢复,特别痛苦。 所以收集一下可用的工具吧,针对CSDN,因为我们现在有代码片了,不知道各个工具的效果如何: 豆约翰博客备份专家V2.6_豆约翰http://www.douyuehan.com/Download1/File/5.aspx [推荐]博客备份工具B

    2022年7月25日
  • ros的安装教程_cad安装教程

    ros的安装教程_cad安装教程介绍ROS安装的三种方法,使用第一种方法可以简单快速安装ROS

    2022年9月10日
  • 剖析PetShop 4

    剖析PetShop 4PetShop的系统架构设计前言:PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。业界有许多.Net与J2EE之争,许多数据是从微软的PetShop和Sun的PetStore而来。这种争论不可避免带有浓厚的商业色彩,对于我们开发人员而言,没有必要过多关注。然而PetShop随着版本的不断更新,至现在基于.Net2.0的PetShop4.0为止,整个设计逐渐变得成熟而优雅,

    2022年10月17日
  • 常用的信息搜集和整理方法_公司合并整合工作方案

    常用的信息搜集和整理方法_公司合并整合工作方案——本文参考自t7前辈的课程,侵删信息收集一、简介什么是信息搜集?信息搜集也称踩点,信息搜集毋庸置疑就是尽可能的搜集目标的信息,包括端口信息、DNS信息、员工邮箱等等看似并不起眼的一些信息都算是信息搜集,这些看似微乎其微的信息,对于渗透测试而言就关乎到成功与否了。信息搜集的重要性信息搜集是渗透测试的最重要…

    2022年4月19日
  • 机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)[通俗易懂]

    机器学习系列(12)_XGBoost参数调优完全指南(附Python代码)[通俗易懂]这篇文章主要讲了如何提升XGBoost模型的表现。首先,我们介绍了相比于GBM,为何XGBoost可以取得这么好的表现。紧接着,我们介绍了每个参数的细节。我们定义了一个可以重复使用的构造模型的函数。最后,我们讨论了使用XGBoost解决问题的一般方法,在AVDataHackathon3.xproblem数据上实践了这些方法。希望看过这篇文章之后,你能有所收获

    2022年6月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号