I need to show PopupWindow
under one Views
shown on the screen.
How can I calculate coordinates of needed View
and place PopupWindow
under it? Code example are more than welcome. Thanks.
you have getLeft() and getBottom() to get the exact position of the view in the layout. You also have getWidth() and getHeight() to know the exact space occupied by the view. If you want to position your popup window below a view. You setLeft() and setTop() methods of the view to position the new popup Window.
Use setWidth(int) and setHeight(int) . Set the layout type for this window. Display the content view in a popup window anchored to the bottom-left corner of the anchor view. Displays the content view in a popup window anchored to the corner of another view.
Locating an already displayed view is fairly easy - here's what I use in my code:
public static Rect locateView(View v) { int[] loc_int = new int[2]; if (v == null) return null; try { v.getLocationOnScreen(loc_int); } catch (NullPointerException npe) { //Happens when the view doesn't exist on screen anymore. return null; } Rect location = new Rect(); location.left = loc_int[0]; location.top = loc_int[1]; location.right = location.left + v.getWidth(); location.bottom = location.top + v.getHeight(); return location; }
You could then use code similar to what Ernesta suggested to stick the popup in the relevant location:
popup.showAtLocation(parent, Gravity.TOP|Gravity.LEFT, location.left, location.bottom);
This would show the popup directly under the original view - no guarantee that there would be enough room to display the view though.
you have getLeft()
and getBottom()
to get the exact position of the view in the layout. You also have getWidth()
and getHeight()
to know the exact space occupied by the view. If you want to position your popup window below a view.
You setLeft()
and setTop()
methods of the view to position the new popup Window.
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