我正在为Android开发一个应用程序,当用户点击屏幕底部的特定菜单栏对象(由水平排列的小图像组成)时,我正在使用弹出窗口。
在点击中,我希望弹出窗口锚定到被单击并显示在顶部的视图的左上角。
唯一似乎相关的方法是 showAsDropDown(View anchor,int xoff,int yoff)和 showAtLocation(View parent,int gravity,int x,int y)。 showAsDropDown的问题在于它锚定在视图的左下角。
还有其他方法可以实现吗?
答案 0 :(得分:36)
popupWindow.showAtLocation(...)
实际上显示窗口绝对位于屏幕(甚至不是应用程序)。该调用中的锚点仅用于其窗口令牌。坐标是给定重力的偏移量。
您真正想要使用的是:
popupWindow.showAsDropDown(anchor, offsetX, offsetY, gravity);
此调用仅适用于API 19+,因此在早期版本中您需要使用:
popupWindow.showAsDropdown(anchor, offsetX, offsetY);
这些调用显示相对于指定锚点视图的弹出窗口。请注意,默认引力(在没有指定重力的情况下调用时)为Gravity.TOP|Gravity.START
,因此,如果您在应用中的各个位置明确使用Gravity.LEFT
,那么您将度过一段美好时光:)
答案 1 :(得分:6)
popupWindow.showAtLocation(anchor, Gravity.BOTTOM, 0, anchor.getHeight());
答案 2 :(得分:5)
您要使用的是showAtLocation(...)
。您可以指定锚点视图(用户单击的视图),并通过gravity
参数和偏移量将其相对于该视图定位。可以想象gravity
参数,如PopupWindow
几乎就像子视图,父视图就像容器布局。
您应该能够将Gravity.LEFT | Gravity.TOP
作为参数。
答案 3 :(得分:5)
您只需要使用 showAsDropDown(View anchor,int xoff,int yoff)语法中的 yoff 参数将popupWindow移动其锚点的高度。 / p>
popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()+popupView.getHeight);
另外,请注意,如果允许锚点的最大高度不允许进行转换,则弹出窗口可能无法正常显示。
答案 4 :(得分:5)
我有这个代码: PopupWindow在特定视图(Gravity End)下面,适用于所有sdk版本。
// display the popup[![enter image description here][1]][1]
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mPopupWindow.showAsDropDown(v, 0, 0, Gravity.END);
} else {
mPopupWindow.showAsDropDown(v, v.getWidth() - mPopupWindow.getWidth(), 0);
}
此处View v是ImageButton Calendar。
答案 5 :(得分:4)
我编写了一个示例 Kotlin 代码,它将在锚视图上方显示一个 PopupWindow
。
private fun showPopupWindow(anchor: View) {
PopupWindow(anchor.context).apply {
isOutsideTouchable = true
val inflater = LayoutInflater.from(anchor.context)
contentView = inflater.inflate(R.layout.popup_layout, null).apply {
measure(
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
)
}
}.also { popupWindow ->
// Absolute location of the anchor view
val location = IntArray(2).apply {
anchor.getLocationOnScreen(this)
}
val size = Size(
popupWindow.contentView.measuredWidth,
popupWindow.contentView.measuredHeight
)
popupWindow.showAtLocation(
anchor,
Gravity.TOP or Gravity.START,
location[0] - (size.width - anchor.width) / 2,
location[1] - size.height
)
}
}
答案 6 :(得分:3)
您可以通过以下
在锚点上方显示弹出窗口popupWindow.showAsDropDown(anchor, 0, -anchor.getHeight()-popupView.getHeight);
答案 7 :(得分:2)
示例:
.iloc[:1,:]
答案 8 :(得分:0)
popupwindow.showAsDropDown(anchor,0,-125); 这件事对我有用