android 7.0 popwindow显示位置异常,在android7.1官方进行解决了,但是还是要多7.0的bug进行解决,我的解决方案里面通过重写popwindow进行适配:
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.PopupWindow;
/**
* 解决7.0 popwindow显示位置的问题
* Created by soyoungboy on 2017/3/16.
*/
public class FixPopWindow extends PopupWindow {
public FixPopWindow() {
}
public FixPopWindow(View contentView) {
super(contentView);
}
public FixPopWindow(View contentView, int width, int height) {
super(contentView, width, height);
}
public FixPopWindow(View contentView, int width, int height, boolean focusable) {
super(contentView, width, height, focusable);
}
public FixPopWindow(Context context) {
super(context);
}
public FixPopWindow(Context context, AttributeSet attrs) {
super(context, attrs);
}
public FixPopWindow(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public FixPopWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public FixPopWindow(int width, int height) {
super(width, height);
}
@Override public void showAsDropDown(View anchorView) {
super.showAsDropDown(anchorView);
if (Build.VERSION.SDK_INT == 24) {
int[] a = new int[2];
anchorView.getLocationInWindow(a);
showAtLocation(anchorView, Gravity.NO_GRAVITY, 0, a[1] + anchorView.getHeight() + 0);
} else {
super.showAsDropDown(anchorView);
}
}
@Override
public void showAsDropDown(View anchorView, int xoff, int yoff) {
if (Build.VERSION.SDK_INT == 24) {
int[] a = new int[2];
anchorView.getLocationInWindow(a);
showAtLocation(anchorView, Gravity.NO_GRAVITY, xoff,
a[1] + anchorView.getHeight() + yoff);
} else {
super.showAsDropDown(anchorView, xoff, yoff);
}
}
}