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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JRTPLIB 3.9.1文档翻译

    JRTPLIB 3.9.1文档翻译MainPageJRTPLIBAuthor:      JoriLiesenborgs      DevelopedattheTheExpertiseCentreforDigitalMedia(EDM),aresearchinstituteoftheHasseltUniversityAcknowledg

    2022年7月28日
  • wireshark抓取arp包分析_dns协议抓包分析

    wireshark抓取arp包分析_dns协议抓包分析使用Wireshark工具抓取ARP协议的数据包,分析ARP协议的地址解析过程、自主学习逻辑以及初次访问和多次访问的区别。

    2022年9月7日
  • pycharm与python的关系_pycharm和python区别[通俗易懂]

    pycharm与python的关系_pycharm和python区别[通俗易懂]pycharm使用创建directory和Pythonpackage的区别pycharm能显示当前python文件下的函数和类的列表吗当然可以,调出Structure视图即可。①快捷键:Alt+7②鼠标移动到窗口左下角小方块,寻Structure”③点击View菜单,选ToolWindows,再寻Structure”pycharm教程(一)安装PyCharm是我…

    2022年8月29日
  • JAVA JVM 优化「建议收藏」

    JAVA JVM 优化「建议收藏」现在多核CPU是主流。利用多核技术,可以有效发挥硬件的能力,提升吞吐量,对于Java程序,可以实现并发垃圾收集。但是Java利用多核技术也带来了一些问题,主要是多线程共享内存引起了。目前内存和CPU之间的带宽是一个主要瓶颈,每个核可以独享一部分高速缓存,可以提高性能。JVM是利用操作系统的”轻量级进程”实现线程,所以线程每操作一次共享内存,都无法在高速缓存中命中,是一次开销较大的

    2022年5月26日
  • 虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏

    虚拟机开启就会蓝屏的解决方法是_虚拟机无限蓝屏VMware与win10(专业版)不兼容的问题前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。一、首先打开控制面板,找到启动或关闭Windows功能二、打开win+R,输入gpedit.msc三、打开控制面板>程序>查看已安装的更新,卸载最近的更新。总结前两天系统出了点问题,然后重置了系统,结果今天装VMware的时候发现一开虚拟机就蓝屏了。找了好些方法,重启了十几次电脑,后面才弄好提示:以下是本篇文章正文内容,下面案例可供参考一、首先打开控制

    2022年9月4日
  • 红色故障码大全_最短路问题算法

    红色故障码大全_最短路问题算法原题链接战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从0到N-1编号)和连接两城市的通路条数。随后M行,每行给出一条通路所连接的两个城市的编号,其间以1个空格分隔。在城市信息之后给出被攻占的

    2022年8月8日

发表回复

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

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