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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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


相关推荐

  • 基于springboot的websocket聊天室[通俗易懂]

    基于springboot的websocket聊天室[通俗易懂]一、概述1.Http2.WebSocket3.Socket4.WebSocket和Http5.WebSocket和Socket6.长连接,短连接7.http和websocket的

    2022年8月16日
    6
  • Iscsiadm解析

    Iscsiadm解析1.#iscsiadm-mdiscovery-tst-p192.168.4.109:3260发现新增target-m模式discovery-t类型(iSCSI3discoverytypes:SendTargets,SLP,andiSNS)-T目标名称stsendtargets发送目标-p…

    2022年8月23日
    7
  • 数据结构Elemtype「建议收藏」

    数据结构Elemtype「建议收藏」在C语言数据结构中,关于数据元素的类型定义均用“ElemTypee;”来表示,其中e是表示数据元素的变量,而ElemType则是它的类型,ElemType的含义就是“数据元素的类型”,是一个抽象的概念,是表示我们所要使用的数据元素应有的类型。ElemType是数据结构上为了说明问题而用的一个词。它是elementtype(“元素的类型”)的简化体。因为数据结构是讨论抽象的数据结构…

    2022年5月19日
    58
  • 微信小程序时间戳转日期_js字符串转日期格式

    微信小程序时间戳转日期_js字符串转日期格式that.data.reportDate为日期数据vardate=newDate(that.data.reportDate.replace(/-/g,”/”));

    2022年10月3日
    2
  • 主机游戏神作和排行榜

    主机游戏神作和排行榜文章目录主机游戏任天堂、索尼、微软三大家任天堂索尼微软其他电视游戏主机(家用机)红白机时代PS时代次世代主机掌机其他游戏PC游戏平台Steam其他评分和榜单端游、页游和手游评分和榜单VR设备ValveIndexHTCViveOculusRiftSOculusQuest三星MR+权威游戏评分媒体TGAIGNGameSpot其他GameRankingsFami通MetacriticEGA游戏…

    2022年7月11日
    83
  • Loadrunner11激活成功教程完成添加License失败

    Loadrunner11激活成功教程完成添加License失败Loadrunner11激活成功教程成功后,用deletelicense.exe工具把License全删除了,启动 Loadrunner,进入目录CONFUGURATION—>loadrunnerlicense,添加license提示我“Licensesecurityviolation.Operationisnotallowed”,于是我猜想是不是我运行deletelicense.exe工

    2022年7月22日
    16

发表回复

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

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