美文网首页
PopupWindow的wrap_content问题

PopupWindow的wrap_content问题

作者: 三木仔 | 来源:发表于2017-04-03 16:25 被阅读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();
        }
    }
    

    相关文章

      网友评论

          本文标题:PopupWindow的wrap_content问题

          本文链接:https://www.haomeiwen.com/subject/ibaewttx.html