项目中有这样一个需求:
用户点击送礼物,会弹出一个礼物选择对话框,然后在选择一个礼物之后,可以选择礼物数量,按照图中的意思,选择数量很自然的想到了用PopupWindow
来做了。但是这里有一个问题就是:弹出来的数量选择框是需要在数量显示栏的上方的。
如果是在下方,那很简单,直接popupWindow.showAsDropDown(v);
即可。但若是在上方,则需要自己计算坐标了,然后通过showAtLocation()
方法来显示。
首先贴一下大致的布局:
1 |
|
对应界面的预览如下图:
这里贴一下Android中的坐标体系:
根据这个图,再来计算坐标值。
这里我在图中做了一下标注:
popupwindow的y坐标应该是1的高度 + 2的高度 - popupwindow的高度
。
1的高度即是gift_recharge_layout对应view.getTop(),2的高度即是choose_gift_count对应view.getTop()。
popupwindow的高度,我们通过调用一次measure()
方法然后通过getMeasuredHeight()
获取。
那么最终popupwindow的y坐标便计算出来了,横坐标的计算比较简单,就不多说了。x、y计算完之后通过showAtLocation
进行设置即可。
下面给下示例的片段代码:
1 | popupParent = (LinearLayout) findViewById(R.id.gift_recharge_layout); |