在android 7.0以后使用Popupwindow的showAsDropDown,会发现不起作用。然后再网上找到了这个方法:
private void showPopupwindow(View view){ if (Build.VERSION.SDK_INT >= 24) { Rect visibleFrame = new Rect(); view.getGlobalVisibleRect(visibleFrame); int height = view.getResources().getDisplayMetrics().heightPixels - visibleFrame.bottom; if (popupWindow != null){ popupWindow.setHeight(height); popupWindow.showAsDropDown(llTop, 0, 0); } } else { if (popupWindow != null){ popupWindow.showAsDropDown(llTop, 0, 0); } } }
这样在非全面屏上或者全面屏的Popupwindow的背景是透明的情况下是没问题的。但是现在全面屏中,Popupwindow的背景不是透明,需要有半透明的时候你会发现,在Popupwindow的底部会有透明的部分,这就说明Popupwindow的高度计算的不够高,这样的现象,产品经理是不同意的,所以又在网上找资料,最终中和了几种方法,实现了在所有手机上都可以的适配方法:
private void showPopupwindow(View view){ if (Build.VERSION.SDK_INT >= 24) { Rect rect = new Rect(); llTop.getGlobalVisibleRect(rect); Activity activity = getActivity(); Rect outRect1 = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1); int height = outRect1.height() - rect.bottom+StatusBarUtils.getStatusBarHeightSDK(mContext); if (screenPopupWindow.getPopupWindow() != null){ PopupWindow popupWindow = screenPopupWindow.getPopupWindow(); popupWindow.setHeight(height); popupWindow.showAsDropDown(llTop, 0, 0); } } else { if (screenPopupWindow.getPopupWindow() != null){ PopupWindow popupWindow = screenPopupWindow.getPopupWindow(); popupWindow.showAsDropDown(llTop, 0, 0); } } }
这就是Popupwindow的showAsDropDown方法的解决办法。如还有问题,请大神们指教!