0
            throw new IllegalStateException("setContentView was not called with a view to display.");
        } 
        onShow(); 
 
        if (this.background == null) {
            this.window.setBackgroundDrawable(new BitmapDrawable());
        } else { 
            this.window.setBackgroundDrawable(this.background);
        } 
 
        // if using PopupWindow#setBackgroundDrawable this is the only values of 
        // the width and hight that make it work 
        // otherwise you need to set the background of the root viewgroup 
        // and set the popupwindow background to an empty BitmapDrawable 
        this.window.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
        this.window.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
        this.window.setTouchable(true);
        this.window.setFocusable(true);
        this.window.setOutsideTouchable(true);
 
        this.window.setContentView(this.root);
    } 
 
    public void setBackgroundDrawable(Drawable background) {
        this.background = background;
    } 
 
    /** 
     * Sets the content view. Probably should be called from {@link onCreate} 
     * 
     * @param root the view the popup will display 
     */ 
    public void setContentView(View root) {
        this.root = root;
        this.window.setContentView(root);
    } 
 
    /** 
     * Will inflate and set the view from a resource id 
     * 
     * @param layoutResID 
     */ 
    public void setContentView(int layoutResID) {
        LayoutInflater inflator = (LayoutInflater) this.anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.setContentView(inflator.inflate(layoutResID, null));
    } 
 
    /** 
     * If you want to do anything when {@link dismiss} is called 
     * 
     * @param listener 
     */ 
    public void setOnDismissListener(PopupWindow.OnDismissListener listener) {
        this.window.setOnDismissListener(listener);
    } 
 
    /** 
     * Displays like a popdown menu from the anchor view 
     */ 
    public void showLikePopDownMenu() { 
        this.showLikePopDownMenu(0, 0);
    } 
 
    /** 
     * Displays like a popdown menu from the anchor view. 
     * 
     * @param xOffset offset in X direction 
     * @param yOffset offset in Y direction 
     */ 
    public void showLikePopDownMenu(int xOffset, int yOffset) {
        this.preShow();
 
        // this.window.setAnimationStyle(R.style.Animations_PopDownMenu); 
 
        this.window.showAsDropDown(this.anchor, xOffset, yOffset);
    } 
 
    /** 
     * Displays like a QuickAction from the anchor view. 
     */ 
    public void showLikeQuickAction() { 
        this.showLikeQuickAction(0, 0);
    } 
 
    /** 
     * Displays like a QuickAction from the anchor view. 
     * 
     * @param xOffset offset in the X direction 
     * @param yOffset offset in the Y direction 
     */ 
    public void showLikeQuickAction(int xOffset, int yOffset) {
        this.preShow();
 
        // this.window.setAnimationStyle(R.style.Animations_GrowFromBottom); 
 
        int[] location = new int[2];
        this.anchor.getLocationOnScreen(location);
 
        Rect anchorRect = new Rect(location[0], location[1], location[0] + this.anchor.getWidth(), location[1] + this.anchor.getHeight());
 
        this.root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
 
        int rootWidth = this.root.getMeasuredWidth();
        int rootHeight = this.root.getMeasuredHeight();
 
        int screenWidth = this.windowManager.getDefaultDisplay().getWidth();
        int screenHeight = this.windowManager.getDefaultDisplay().getHeight();
 
        int xPos = ((screenWidth - rootWidth) / 2) + xOffset;
        int yPos = anchorRect.top - rootHeight + yOffset;
 
        // display on bottom 
        if (rootHeight > anchorRect.top) {
            yPos = anchorRect.bottom + yOffset;
            // this.window.setAnimationStyle(R.style.Animations_GrowFromTop); 
        } 
 
        this.window.showAtLocation(this.anchor, Gravity.NO_GRAVITY, xPos, yPos);
    } 
 
    public void dismiss() { 
        this.window.dismiss();
    }