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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读