Positioning Popup window in Android correctly
android, android-intent, android-layout, android-widget
Solution
I know its quiet late, but i hope it will help someone.
LayoutInflater layoutInflater = getLayoutInflater();
int popupWidth = 500;//ViewGroup.LayoutParams.WRAP_CONTENT;
int popupHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
popupView = layoutInflater.inflate(R.layout.main, null);
PopupWindow attachmentPopup = new PopupWindow(this);
attachmentPopup.setFocusable(true);
attachmentPopup.setWidth(popupWidth);
attachmentPopup.setHeight(popupHeight);
attachmentPopup.setContentView(popupView);
attachmentPopup.setBackgroundDrawable(new BitmapDrawable());
attachmentPopup.showAsDropDown(v, -5, 0);
It will position your popup window according to the position of your button.
Problem
I'm stuck with the Popup window positioning. I'm showing my popup window on click of a Button. I want it should be positioned according to space available. Also if my button is at center it should be below the button. Below is my code for this thing. Please let me know where i'm wrong. Thank you. ``` mBtnPopUp.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ListView mListView = (ListView) mPopUpView.findViewById(R.id.pop_up_list_view); mListView.setAdapter(mPopupListAdapter); Drawable drawable = getResources().getDrawable(android.R.drawable.alert_light_frame); mPopupWindow.setBackgroundDrawable(drawable); // mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); showLikeQuickAction(0, 0); mPopupWindow.showAsDropDown(mBtnPopUp); } }); mPopupWindow.setOutsideTouchable(true); public void showLikeQuickAction(int xOffset, int yOffset) { int[] location = new int[2]; mBtnPopUp.getLocationOnScreen(location); Rect anchorRect = new Rect(location[0], location[1], location[0] + mBtnPopUp.getWidth(), location[1] + mBtnPopUp.getHeight()); mBtnPopUp.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); int rootWidth = mBtnPopUp.getMeasuredWidth(); int rootHeight = mBtnPopUp.getMeasuredHeight(); @SuppressWarnings("deprecation") int screenWidth = mWindowManager.getDefaultDisplay().getWidth(); int xPos = screenWidth - rootWidth + xOffset; int yPos = anchorRect.top - rootHeight + yOffset; if(rootWidth > anchorRect.right - anchorRect.left) { // right xPos = anchorRect.right - rootWidth; } else { // left xPos = anchorRect.left + 15; } if(xPos + rootWidth > screenWidth) xPos = screenWidth - rootWidth - 20; // display on bottom if(rootHeight > anchorRect.top) { yPos = anchorRect.bottom + yOffset; // mPopupWindow.setAnimationStyle(R.style.Animations_GrowFromTop); } mPopupWindow.showAtLocation(mBtnPopUp, Gravity.NO_GRAVITY, xPos, yPos); } ``` Thank you..