Code example for PopupWindow

Methods: getBackgroundgetContentViewgetInputMethodModesetContentView

0
			} 
 
			mPopup.setContentView(dropDownView);
		} 
		else { 
			dropDownView = (ViewGroup) mPopup.getContentView();
			final View view = mPromptView;
			if (view != null) {
				LinearLayout.LayoutParams hintParams =
						(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;
		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. 
		boolean ignoreBottomDecorations =
				mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED;
		final int maxHeight = /*mPopup.*/getMaxAvailableHeight(
				mDropDownAnchorView, mDropDownVerticalOffset, ignoreBottomDecorations);
 
		if (mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) {
			return maxHeight + padding;
		} 
 
		final int listContent = /*mDropDownList.*/measureHeightOfChildren(MeasureSpec.UNSPECIFIED,
				0, -1/*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;
	} 
 
	private int getMaxAvailableHeight(View anchor, int yOffset, boolean ignoreBottomDecorations) {
		final Rect displayFrame = new Rect();
		anchor.getWindowVisibleDisplayFrame(displayFrame);
 
		final int[] anchorPos = new int[2];
		anchor.getLocationOnScreen(anchorPos);
 
		int bottomEdge = displayFrame.bottom;
		if (ignoreBottomDecorations) {
			Resources res = anchor.getContext().getResources();
			bottomEdge = res.getDisplayMetrics().heightPixels;
		} 
		final int distanceToBottom = bottomEdge - (anchorPos[1] + anchor.getHeight()) - yOffset;
		final int distanceToTop = anchorPos[1] - displayFrame.top + yOffset;
 
		// anchorPos[1] is distance from anchor to top of screen 
		int returnedHeight = Math.max(distanceToBottom, distanceToTop);
		if (mPopup.getBackground() != null) {
			mPopup.getBackground().getPadding(mTempRect);
			returnedHeight -= mTempRect.top + mTempRect.bottom;
		} 
 
		return returnedHeight;
	}