如何检测ListPopupWindow是否显示在上方或下方以锚定视图?

时间:2017-01-11 15:01:45

标签: android android-layout

我正在显示提供锚视图的ListPopupWindow。我需要针对锚视图显示ListPopupWindow的不同位置的不同内容。

例如,如果ListPopupWindow显示上面的锚点视图,如果ListPopupWindow显示在锚点视图下方,则其内容将不同且内容不同。

我的问题是如何检测ListPopupWindow的垂直位置?无论是在锚视图的上方还是下方。 在此先感谢!!!

1 个答案:

答案 0 :(得分:0)

ListPopupWindow将PopupWindow作为默认成员,因此无法在程序包外部访问它。所以你应该使用反射。

创建一个扩展类并在ctor中使用此代码

    try {
        Field f = ListPopupWindow.class.getDeclaredField("mPopup");
        if (f != null) {
            f.setAccessible(true);
            Object obj = f.get(this);
            if (obj != null) {
                mSuperPopup = (PopupWindow) obj;
            }
        }
    } catch (Exception e) {
        Log.e(TAG, e.getMessage());
    }

private PopupWindow mSuperPopup = null;

public boolean isAboveAnchor() {
    if (mSuperPopup != null)
        return mSuperPopup.isAboveAnchor();
    return false;
}