Android Nougat PopupWindow showAsDropDown(...)重力不起作用

吉姆森

我有这个代码。

PopupWindow popUp = new PopupWindow();
popUp.setFocusable(true);
popUp.setOutsideTouchable(true);        
popUp.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
popUp.setHeight(600);

popUp.setContentView(anchorView);
popUp.showAsDropDown(anchorView);
popUp.update();

它完美适用于Android版本<Android Nougat。但是在Android Nougat中,弹出窗口显示在屏幕顶部,而不是相对于锚视图。

Liang Steve

似乎是android 7.0中的错误。但是您可以通过兼容的方式解决它。

PopupWindow popUp = new PopupWindow();
popUp.setFocusable(true);
popUp.setOutsideTouchable(true);        
popUp.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
popUp.setHeight(600);

popUp.setContentView(anchorView);
  if (android.os.Build.VERSION.SDK_INT >=24) {
     int[] a = new int[2]; //getLocationInWindow required array of size 2
     anchorView.getLocationInWindow(a);
     popUp.showAtLocation(((Activity) mContext).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0 , a[1]+anchorView.getHeight());
    } else{
     popUp.showAsDropDown(anchorView);
}

popUp.update();

Google将在以后的版本中修复此错误。最后有一个解决方法。创建流行音乐时,需要提供高度。

PopupWindow popup = new PopupWindow(contentView, with, height);

像上面那样初始化pop,并且您只能使用popUp.showAsDropDown(anchorView)显示此弹出窗口。这样,您可以忽略Android API的版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章