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..
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.
public void downloadBtnSelected(View anchor) {
final ListPopupWindow lpw = new ListPopupWindow(this);
String[] data = { ".png", ".pdf", ".jpg", ".jpeg" };
PopupAdapter pa = new PopupAdapter(data, this);
lpw.setAdapter(pa);
//setting up an anchor view
lpw.setAnchorView(anchor);
//Setting measure specifications. I'v used this mesure specs to display my
//ListView as wide as my anchor view is
lpw.setHeight(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
lpw.setWidth(anchor.getRight() - anchor.getLeft());
// Background is needed. You can use your own drawable or make a 9patch.
// I'v used a custom btn drawable. looks nice.
lpw.setBackgroundDrawable(this.getResources().getDrawable(android.R.drawable.btn_default));
// Offset between anchor view and popupWindow
lpw.setVerticalOffset(3);
lpw.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Our action.....
lpw.dismiss();
}
});
lpw.show();
}
and the button with an onClickListener to call this method:
Button btn = new Button(this);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
downloadBtnSelected(v);
}
});
this code let's you to show a popup below btn the popup width will be the same as the button one. if you want to fill the screen width- set width=LinearLayout.MATCH_PARENT popup menu will be displayed below the anchor view if space, and beyond if there is no space below
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With