[置顶] Android 7.0以上(包含8.0), popupWindow弹窗位置异常, 解决方案

标签: Android popupWindow android7.1 android8.0 弹窗异常
909人阅读 评论(0) 收藏 举报
分类:

通常我们的App中, 在标题的位置, 点击需要弹出菜单, 效果如下:

这很难吗? 拿起键盘就是干…

public void showAsDropDown(View anchor, int xoff, int yoff) {
    showAsDropDown(anchor, xoff, yoff, DEFAULT_ANCHORED_GRAVITY);
}

但是往往并不是我们想的那样, 至今Android7.0,以上包括(7.1, 8.0) 系统的手机弹窗, 根本不按套路出牌, 以致我们相同的代码, 却有不同的效果.

喂! 我的标题栏呢??? 被你吃啦???

赶紧给我吐出来!!!

这能难倒我? 浏览器打开> 百度打开> xxx不能正常显示

嗖嗖嗖…

你可能看到这样的代码

if (Build.VERSION.SDK_INT >= 24) {
     int[] location = new int[2];
     anchor.getLocationOnScreen(location);
     // 7.1 版本处理
     if (Build.VERSION.SDK_INT == 25) {
         WindowManager windowManager = (WindowManager) pw.getContentView().getContext().getSystemService(Context.WINDOW_SERVICE);
         if (windowManager != null) {
             int screenHeight = windowManager.getDefaultDisplay().getHeight();
             // PopupWindow height for match_parent, will occupy the entire screen, it needs to do special treatment in Android 7.1
             pw.setHeight(screenHeight - location[1] - anchor.getHeight() - yoff);
         }
     }
     pw.showAtLocation(anchor, Gravity.NO_GRAVITY, xoff, location[1] + anchor.getHeight() + yoff);

 } else {
     pw.showAsDropDown(anchor, xoff, yoff);
 }

试试效果, 还真行.

如果你到这里就关掉网页的话, 那我只能说, bug还在向你招手呢? 是不是想让测试MM找你呢? 难道是…(邪恶..)

Android8.0系统, 这样的方式并不能解决,.

终极解决方案(7.0, 7.1, 8.0)

/**
 *
 * @param pw     popupWindow
 * @param anchor v
 * @param xoff   x轴偏移
 * @param yoff   y轴偏移
 */
public static void showAsDropDown(final PopupWindow pw, final View anchor, final int xoff, final int yoff) {
    if (Build.VERSION.SDK_INT >= 24) {
        Rect visibleFrame = new Rect();
        anchor.getGlobalVisibleRect(visibleFrame);
        int height = anchor.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom;
        pw.setHeight(height);
        pw.showAsDropDown(anchor, xoff, yoff);
    } else {
        pw.showAsDropDown(anchor, xoff, yoff);
    }
}
查看评论

Android7.0 ,7.1,8.0 popupwindow showAsDropDown 显示异常解决办法

Android7.0 以上popupwindow showAsDropDown在屏幕上方弹出解决方法,通过版本控制解决, 参考博客:http://blog.csdn.net/zhihui_520/...
  • ithe1001
  • ithe1001
  • 2017年02月21日 14:15
  • 3994

(原创)关于PopupWindow的showAsDropDown()和showAtLocation()使用方式及其区别

PopupWindow的showAsDropDown()和showAtLocation()使用方式及其区别
  • lnn368
  • lnn368
  • 2016年04月19日 00:15
  • 20503

Android PopupWindow在7.0中弹出位置问题

7.1版本这个bug被修复了 在7.0中宽和高如果设置得过大,弹出的PopupWindow会覆盖当前的视窗而覆盖整个手机屏幕,并不是在anchorView的下方弹出来。 方法一: public v...
  • knockheart
  • knockheart
  • 2017年04月07日 10:13
  • 2765

关于华为P10(Android 8.0系统)出现的一个莫名奇妙的ANR

关于华为P10(Android 8.0系统)出现的一个莫名奇妙的ANR 首先贴出控制台报出的错误代码: java.util.concurrent.TimeoutException: andro...
  • hx13651244616
  • hx13651244616
  • 2018年03月13日 11:27
  • 339

关于android 8.0 全屏的解决方案

最近在做一个android 8.0的车机项目,车机嘛,界面肯定是全屏的,除了修改system ui 以外也可以从代码层去解决,其实很简单,就只需两步,下面就是我的解决方式。  1.需要在Android...
  • lucas1986
  • lucas1986
  • 2018年03月19日 10:44
  • 132

android popupwindow在7.0 7.1上的问题

建了博客账号,建了github,可是一点都不想写啊,懒到家了 今天主要被popupwindow的问题搞懵逼了,android 7.0的源码是有bug的,可参考 http://www.jianshu.c...
  • m190607070
  • m190607070
  • 2017年02月28日 18:54
  • 2515

Android开发技术学习之popupwindow的弹窗实现

*好久没有写博客了,今天给大家写点东西。最近有个需求是需要实现popupwindow的弹窗功能。就是大家常见的qq,微信,钉钉等有的功能。如下图所示: 如上图所示,三个我用的比较多的软件,都会有...
  • csdnzouqi
  • csdnzouqi
  • 2016年05月17日 13:47
  • 33673

Android PopupWindow弹出窗口的完美实现(实现弹出背景变暗效果)

最近尝试使用popupWindow实现背景变暗效果,自己优化了一下,并封装成一个可以调用的方法,默认实现弹出窗口显示在传入view的下方,以下代码有详细注释,有问题可以留言展示效果如下: 代码展示布...
  • qq_33416180
  • qq_33416180
  • 2016年05月07日 11:31
  • 8555

【Android开发】动画弹出PopupWindow并使背景变暗

我们在平常的android应用开发过程中,当应用数据太多太繁杂时,通常都会通过分类筛选让用户更好的找到自己想要的信息。因此利用PopupWindow或Dialog让用户快速选择定位是一个很好的选择。如...
  • liuloua
  • liuloua
  • 2016年03月17日 14:47
  • 17815

android 底部弹出选项,背景透明,PopupWindow的使用

http://www.cnblogs.com/zhwl/p/3332636.html 看了这个文章后我才学会的这个东西,先看下面成品,需求不同就不必浪费时间看下去了 这是需要弹出来的布局文件:...
  • tt479701566
  • tt479701566
  • 2015年04月30日 11:45
  • 891
    个人资料
    等级:
    访问量: 4万+
    积分: 319
    排名: 24万+
    最新评论
    底部跑马灯