PopupWindow的wrap_content问题
2017-04-03 本文已影响641人
三木仔
在使用popupWindow的时候发现一个问题:
mPopupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
由于显示的页面的长宽是不确定的,所以只能使用wrap_content。但是在使用wrap_content时候会出现显示不完整的问题,可见其在measure的时候会出现问题。
一开始的时候,设想通过content_view的getMeasureWidth(),getMeasuredHeight()获取长宽,发现获取到的为0,原因是在获取长宽的时候,content_view的measure还未完成。
解决方法:先进行measure再次获取getMeasureWidth()
比较完整代码:
public class MyPopupView {
private Context mContext;
private PopupWindow mPopupWindow;
private View mRootView;
private boolean isShowing;
public MyPopupView(View rootView, Context mContext){
this.mContext = mContext;
this.mRootView = rootView;
this.isShowing = false;
}
public void showView(){
if(isShowing == true)
return;
if (mPopupWindow == null){
View contentView = LayoutInflater.from(mContext).inflate(R.layout.popup_view,null);
contentView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
mPopupWindow = new PopupWindow(contentView, contentView.getMeasuredWidth(), ViewGroup.LayoutParams.WRAP_CONTENT);
// mPopupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
mPopupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
mPopupWindow.setFocusable(true);
}
isShowing = true;
mPopupWindow.showAsDropDown(mRootView);//以contentview为参照系
// 或者 mPopupWindow.showAtLocation();
}
}