热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidPopWindow在sdk>7.0上显示错位的bug适配

参考博客:http:blog.csdn.netzhihui_520articledetails79097161之前在没有适配Androidsdk7.0的时候PopWindow用来显

参考博客:http://blog.csdn.net/zhihui_520/article/details/79097161

之前在没有适配Android sdk 7.0 的时候PopWindow 用来显示下拉框 显示阻断提示 感觉比自定义的Dialog/DialogFragment 简单粗暴多了
后来7.0出来后我大爱的PopWidow 显示竟然错位了 what?没办法只能上万能度一阵狂搜后来才知道这是PopWindow在Android7.0上的一个小小的bug、、、一万个草泥飞奔而过

之前适配解决办法:

在Sdk大于等于24 的时候先传入触发PopWidnow显示的View获取该View的绝对位置然后调用PopWindow的 showAtLocation方法把显示偏移值给加上 然后就大功告成了(Andorid 的坐标系是左上角 [0,0])

public void showPopuWindow(View v) {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
return;
} else {
if (Build.VERSION.SDK_INT >= 24) {
int[] a = new int[2];
v.getLocationInWindow(a);
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, 0, v.getHeight() + a[1]);
} else {
popupWindow.showAsDropDown(v, 0, 0);
}
}
}

本以为大功告成了 后来在7.1上跑了一下 what? 老纸不是适配了么没办法那就在改吧 后来翻了大神的博客才知道原来Android7.1以上 Google大大已经修复了这个Bug (吐槽:卧槽修改为啥不修改好!!!,大神也会犯错嗯淡定淡定)

现在的解决方案

其实就是获取触发点的绝对位置 让屏幕的height减去触发点的底部距离 然后重新给PopWidnow 设置高度显示(纯属个人理解)

public void showAsDropDown(View anchor, int xoff, int yoff) {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
return;
} else {
if (Build.VERSION.SDK_INT >= 24) {
Rect visibleFrame = new Rect();
anchor.getGlobalVisibleRect(visibleFrame);
int height = anchor.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom;
popupWindow.setHeight(height);
popupWindow.showAsDropDown(anchor, xoff, yoff);
} else {
popupWindow.showAsDropDown(anchor, xoff, yoff);
}
}
}

欢迎个大神扔砖指正


推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
author-avatar
Fater-_635
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有