/// <summary>Dismiss the popup window.</summary> /// <remarks>Dismiss the popup window.</remarks> public virtual void dismiss() { mPopup.dismiss(); removePromptView(); mPopup.setContentView(null); mDropDownList = null; mHandler.removeCallbacks(mResizePopupRunnable); }
/// <summary> /// <p>Builds the popup window's content and returns the height the popup /// should have. /// </summary> /// <remarks> /// <p>Builds the popup window's content and returns the height the popup /// should have. Returns -1 when the content already exists.</p> /// </remarks> /// <returns>the content's height or -1 if content already exists</returns> private int buildDropDown() { android.view.ViewGroup dropDownView; int otherHeights = 0; if (mDropDownList == null) { android.content.Context context = mContext; mShowDropDownRunnable = new _Runnable_976(this); mDropDownList = new android.widget.ListPopupWindow.DropDownListView(context, !mModal ); if (mDropDownListHighlight != null) { mDropDownList.setSelector(mDropDownListHighlight); } mDropDownList.setAdapter(mAdapter); mDropDownList.setOnItemClickListener(mItemClickListener); mDropDownList.setFocusable(true); mDropDownList.setFocusableInTouchMode(true); mDropDownList.setOnItemSelectedListener(new _OnItemSelectedListener_994(this)); mDropDownList.setOnScrollListener(mScrollListener); if (mItemSelectedListener != null) { mDropDownList.setOnItemSelectedListener(mItemSelectedListener); } dropDownView = mDropDownList; android.view.View hintView = mPromptView; if (hintView != null) { // if an hint has been specified, we accomodate more space for it and // add a text view in the drop down menu, at the bottom of the list android.widget.LinearLayout hintContainer = new android.widget.LinearLayout(context ); hintContainer.setOrientation(android.widget.LinearLayout.VERTICAL); android.widget.LinearLayout.LayoutParams hintParams = new android.widget.LinearLayout .LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT, 0, 1.0f); switch (mPromptPosition) { case POSITION_PROMPT_BELOW: { hintContainer.addView(dropDownView, hintParams); hintContainer.addView(hintView); break; } case POSITION_PROMPT_ABOVE: { hintContainer.addView(hintView); hintContainer.addView(dropDownView, hintParams); break; } default: { android.util.Log.e(TAG, "Invalid hint position " + mPromptPosition); break; } } // measure the hint's height to find how much more vertical space // we need to add to the drop down's height int widthSpec = android.view.View.MeasureSpec.makeMeasureSpec(mDropDownWidth, android.view.View .MeasureSpec.AT_MOST); int heightSpec = android.view.View.MeasureSpec.UNSPECIFIED; hintView.measure(widthSpec, heightSpec); hintParams = (android.widget.LinearLayout.LayoutParams)hintView.getLayoutParams(); otherHeights = hintView.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin; dropDownView = hintContainer; } mPopup.setContentView(dropDownView); } else { dropDownView = (android.view.ViewGroup)mPopup.getContentView(); android.view.View view = mPromptView; if (view != null) { android.widget.LinearLayout.LayoutParams hintParams = (android.widget.LinearLayout .LayoutParams)view.getLayoutParams(); otherHeights = view.getMeasuredHeight() + hintParams.topMargin + hintParams.bottomMargin; } } // getMaxAvailableHeight() subtracts the padding, so we put it back // to get the available height for the whole window int padding = 0; android.graphics.drawable.Drawable background = mPopup.getBackground(); if (background != null) { background.getPadding(mTempRect); padding = mTempRect.top + mTempRect.bottom; // If we don't have an explicit vertical offset, determine one from the window // background so that content will line up. if (!mDropDownVerticalOffsetSet) { mDropDownVerticalOffset = -mTempRect.top; } } // Max height available on the screen for a popup. bool ignoreBottomDecorations = mPopup.getInputMethodMode() == android.widget.PopupWindow .INPUT_METHOD_NOT_NEEDED; int maxHeight = mPopup.getMaxAvailableHeight(getAnchorView(), mDropDownVerticalOffset , ignoreBottomDecorations); if (mDropDownAlwaysVisible || mDropDownHeight == android.view.ViewGroup.LayoutParams .MATCH_PARENT) { return maxHeight + padding; } int listContent = mDropDownList.measureHeightOfChildren(android.view.View.MeasureSpec .UNSPECIFIED, 0, android.widget.ListView.NO_POSITION, maxHeight - otherHeights, -1); // add padding only if the list has items in it, that way we don't show // the popup if it is not needed if (listContent > 0) { otherHeights += padding; } return listContent + otherHeights; }