android - showAsDropDown 重力参数不起作用

标签 android gravity android-popupwindow

我正尝试将 PopUpWindow 在锚定 View 上水平居中,但 Gravity.CENTER 参数被忽略。

这是我正在使用的方法:

popupWindow.showAsDropDown(anchorView, 0, 0, Gravity.CENTER);

无论我输入什么 CENTER 重力值(TOP 或 BOTTOM 也不起作用),弹出窗口始终显示在同一位置: anchor 的左上角,除非我使用 START 或 END 值。

文档和 javaDoc 没有列出对其接受的值的任何限制,因此我假设它也接受任何 CENTER、TOP 和 BOTTOM 值:https://developer.android.com/reference/android/widget/PopupWindow#showAsDropDown(android.view.View,%20int,%20int,%20int)

我还使用小于、等于和大于弹出窗口的 anchor View 对此进行了测试,弹出窗口设置为不按预期填满屏幕宽度。

看起来这种方法与不采用重力参数的等效方法没有什么不同

popupWindow.showAsDropDown(anchorView, 0, 0);

这是一个错误还是这不是应该的使用方式?

最佳答案

对于PopupWindow.showAsDropDown(),似乎是按预期工作的,追根溯源,你最终可以看到重力参数只适用于水平值(value)观。

跟踪来自 PopupWindow.showAsDropDown()gravity 值至 PopupWindow.findDropDownPosition() , 我们已经可以看到提示 @param gravity horizo​​ntal gravity specifying popup alignment

然后更深入一步到Gravity.getAbsoluteGravity()也暗示了同样的事情 @param gravity The gravity to convert to absolute (horizo​​ntal) values.

但我相信您想要实现的是 Show a PopupWindow centralized ,它使用 PopupWindow.showAtLocation()

PopupWindow.showAtLocation(View parent, int gravity, int x, int y)

关于android - showAsDropDown 重力参数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54540982/

相关文章:

android - 为什么在使用 Robolectric 时不调用 PopupWindow.OnDismissListener?

java - 如果我尝试在 textview 中捏合,缩放不起作用

android - 在 ConstraintLayout 中使用 ListView

android - AbsListView LayoutParams 设置布局重力

C#重力模拟代码行为怪异

android - 从 Fragment 显示弹出窗口

android - GLSurfaceView 在 Honeycomb 上有时会变黑,在 ICS 上有效

java - Activity 和服务之间的 SharedPreference

php - 如何在 WordPress 主题模板中回显重力形式条目计数

android - 无法在 PopupWindow 中编辑 EditText 的文本