popwindow 的showAsDropDown对于 华为、小米等全面屏适配问题,适配后不会出现底部白条及位置错误

好久没写博客了,记录下今天遇到的问题。showAsDropDown在7.0后需要适配。

造成此问题的原因是 华为等全面屏在

relayView.getResources().getDisplayMetrics()

获取高度的时候,把通知栏的高度也囊括进来了,找了一天,网上的代码比较过时了,使用后都没什么效果。

修改方案(获取activity的高度后减去控件高度即可):

if (Build.VERSION.SDK_INT < 24) {
    popupWindow.showAsDropDown(relayView);
} else {
    Rect rect = new Rect();
    relayView.getWindowVisibleDisplayFrame(rect);
    Activity activity = (Activity) relayView.getContext();
    Rect outRectReal = new Rect();
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRectReal );
    int height = outRectReal .height() - rect.bottom;
    popupWindow.setHeight(height );
    popupWindow.showAsDropDown(relayView);
}

在使用showAsDropDown的时候 替换上边代码,即可修复。

 

你可能感兴趣的:(popwindow)