簡體   English   中英

在錨點的中心顯示PopUp(查看)

[英]Show PopUp at the center of anchor(view)

我想根據錨點位置顯示彈出窗口。

當前,它在錨點的左上角顯示彈出窗口,但我想在錨點的中心位置而不是向左顯示彈出窗口。

這是我的代碼:

public void show (View anchor) {
    preShow();
    int xPos, yPos,arrowPos;
    mDidAction          = false;
    int[] location      = new int[2];
    anchor.getLocationOnScreen(location);
    Rect anchorRect     = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] 
                        + anchor.getHeight());
    //mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    int rootHeight      = mRootView.getMeasuredHeight();
    if (rootWidth == 0) {
        rootWidth       =  mRootView.getMeasuredWidth();;
    }
    int screenWidth     = mWindowManager.getDefaultDisplay().getWidth();
    int screenHeight    = mWindowManager.getDefaultDisplay().getHeight();

    //automatically get X coord of popup (top left)
    if ((anchorRect.left + rootWidth) > screenWidth) {
        xPos        = anchorRect.left - (rootWidth-anchor.getWidth());          
        xPos        = (xPos < 0) ? 0 : xPos;

        arrowPos    = anchorRect.centerX()-xPos;
    } else {
        if (anchor.getWidth() > rootWidth) {
            xPos = anchorRect.centerX() - (rootWidth/2);
        } else {
            xPos = anchorRect.left;
        }
        arrowPos = anchorRect.centerX()-xPos;
    }
    int dyTop           = anchorRect.top;

    // //automatically get X coord of popup (top left)
    int dyBottom        = screenHeight - anchorRect.bottom;
    boolean onTop       = (dyTop > dyBottom) ? true : false;
    if (onTop) {
        if (rootHeight > dyTop) {
            yPos            = 15;
            LayoutParams l  = mScroller.getLayoutParams();
            l.height        = dyTop - anchor.getHeight();
        } else {
            yPos = anchorRect.top - rootHeight;
        }
    } else {
        yPos = anchorRect.bottom;
        if (rootHeight > dyBottom) { 
            LayoutParams l  = mScroller.getLayoutParams();
            l.height        = dyBottom;
        }
    }

    mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos,yPos);
}

請建議

代替這個

mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos,yPos);

試試這個可能對您有幫助...

mWindow.showAtLocation(anchor, Gravity.CENTER, 0, 0);

要么

mWindow.showAtLocation(anchor, Gravity.CENTER, anchorwidth / 2, anchorheight / 2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM