docs: public void show() {
          int height = buildDropDown();
  
          int widthSpec = 0;
          int heightSpec = 0;
  
          boolean noInputMethod = isInputMethodNotNeeded();
  
          if (mPopup.isShowing()) {
              if (mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {
                  // The call to PopupWindow's update method below can accept -1 for any
                  // value you do not want to update.
                  widthSpec = -1;
              } else if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
                  widthSpec = getAnchorView().getWidth();
              } else {
                  widthSpec = mDropDownWidth;
              }
  
              if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
                  // The call to PopupWindow's update method below can accept -1 for any
                  // value you do not want to update.
                  heightSpec = noInputMethod ? height : ViewGroup.LayoutParams.MATCH_PARENT;
                  if (noInputMethod) {
                      mPopup.setWindowLayoutMode(
                              mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ?
                                      ViewGroup.LayoutParams.MATCH_PARENT : 0, 0);
                  } else {
                      mPopup.setWindowLayoutMode(
                              mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT ?
                                      ViewGroup.LayoutParams.MATCH_PARENT : 0,
                              ViewGroup.LayoutParams.MATCH_PARENT);
                  }
              } else if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {
                  heightSpec = height;
              } else {
                  heightSpec = mDropDownHeight;
              }
  
              mPopup.setOutsideTouchable(!mForceIgnoreOutsideTouch && !mDropDownAlwaysVisible);
  
              mPopup.update(getAnchorView(), mDropDownHorizontalOffset,
                      mDropDownVerticalOffset, widthSpec, heightSpec);
          } else {
              if (mDropDownWidth == ViewGroup.LayoutParams.MATCH_PARENT) {
                  widthSpec = ViewGroup.LayoutParams.MATCH_PARENT;
              } else {
                  if (mDropDownWidth == ViewGroup.LayoutParams.WRAP_CONTENT) {
                      mPopup.setWidth(getAnchorView().getWidth());
                  } else {
                      mPopup.setWidth(mDropDownWidth);
                  }
              }
  
              if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
                  heightSpec = ViewGroup.LayoutParams.MATCH_PARENT;
              } else {
                  if (mDropDownHeight == ViewGroup.LayoutParams.WRAP_CONTENT) {
                      mPopup.setHeight(height);
                  } else {
                      mPopup.setHeight(mDropDownHeight);
                  }
              }
  
              mPopup.setWindowLayoutMode(widthSpec, heightSpec);
              setPopupClipToScreenEnabled(true);
  
              // use outside touchable to dismiss drop down when touching outside of it, so
              // only set this if the dropdown is not always visible
              mPopup.setOutsideTouchable(!mForceIgnoreOutsideTouch && !mDropDownAlwaysVisible);
              mPopup.setTouchInterceptor(mTouchInterceptor);
              PopupWindowCompat.showAsDropDown(mPopup, getAnchorView(), mDropDownHorizontalOffset,
                      mDropDownVerticalOffset, mDropDownGravity);
              mDropDownList.setSelection(ListView.INVALID_POSITION);
  
              if (!mModal || mDropDownList.isInTouchMode()) {
                  clearListSelection();
              }
              if (!mModal) {
                  mHandler.post(mHideSelector);
              }
  
              // show item animation
              if(mItemAnimationId != 0)
  	            mPopup.getContentView().getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
  
  					@Override
  					public boolean onPreDraw() {
  						mPopup.getContentView().getViewTreeObserver().removeOnPreDrawListener(this);
  						for(int i = 0, count = mDropDownList.getChildCount(); i < count; i ++){
  							View v = mDropDownList.getChildAt(i);
  
  							Animation anim = AnimationUtils.loadAnimation(mContext, mItemAnimationId);
  							anim.setStartOffset(mItemAnimationOffset * i);
  							v.startAnimation(anim);
  						}
  						return false;
  					}
  
  				});
          }
      }