Ejemplo n.º 1
0
		/// <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);
		}
Ejemplo n.º 2
0
		/// <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;
		}