package com.flyco.dialog.widget.internal;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewTreeObserver;
import com.flyco.dialog.utils.StatusBarUtils;
import com.flyco.dialog.widget.base.BaseDialog;
/** Base class to help create PopupWindow Style Dialog(实现PopupWindow风格对话框基类) */
public abstract class InternalBasePopup<T extends InternalBasePopup<T>> extends BaseDialog<T> {
protected View mAnchorView;
protected int mX;
protected int mY;
/** BubblePopup位于给定位置上方(Gravity.Top)或者下方(Gravity.Bottom) */
protected int mGravity;
protected float mXOffset;
protected float mYOffset;
protected boolean isLayoutObtain;
public InternalBasePopup(Context context) {
super(context);
heightScale(1);
dimEnabled(false);
}
@Override
public void onViewCreated(final View inflate) {
mLlControlHeight.setClipChildren(false);
if (inflate != null) {
inflate.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
isLayoutObtain = true;
onLayoutObtain();
}
});
}
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
if (isLayoutObtain) {
onLayoutObtain();
}
}
/** At this time, we can get view size in dialog(可以获得对话框内视图大小) */
public abstract void onLayoutObtain();
public abstract T anchorView(View anchorView);
/** Gravity.Top or Gravity.Bottom of given positon */
public T gravity(int gravity) {
if (gravity != Gravity.TOP && gravity != Gravity.BOTTOM) {
throw new IllegalArgumentException("Gravity must be either Gravity.TOP or Gravity.BOTTOM");
}
mGravity = gravity;
anchorView(mAnchorView);
return (T) this;
}
public T location(int x, int y) {
mX = x;
mY = y - StatusBarUtils.getHeight(mContext);
return (T) this;
}
}