コード例 #1
0
  public void show() {
    int height = buildDropDown();

    int widthSpec = 0;
    int heightSpec = 0;

    boolean noInputMethod = isInputMethodNotNeeded();
    // XXX mPopup.setAllowScrollingAnchorParent(!noInputMethod);

    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 = mDropDownAnchorView.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(true);

      mPopup.update(
          mDropDownAnchorView,
          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(mDropDownAnchorView.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);
      // XXX mPopup.setClipToScreenEnabled(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(true);
      mPopup.setTouchInterceptor(mTouchInterceptor);
      mPopup.showAsDropDown(
          mDropDownAnchorView, mDropDownHorizontalOffset, mDropDownVerticalOffset);
      mDropDownList.setSelection(ListView.INVALID_POSITION);

      if (!mModal || mDropDownList.isInTouchMode()) {
        clearListSelection();
      }
      if (!mModal) {
        mHandler.post(mHideSelector);
      }
    }
  }