BasePopWindow.java 2.41 KB
package com.sw.laryngoscope.popWindow;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.PopupWindow;

import androidx.annotation.IdRes;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.viewbinding.ViewBinding;

import com.sw.laryngoscope.R;


public abstract class BasePopWindow<T extends ViewBinding>
        extends PopupWindow
        implements View.OnClickListener, View.OnTouchListener {

    public String TAG = "";
    protected Context mContext;
    protected ConstraintLayout rootView;
    protected T binding; // 绑定 ViewBinding
    protected View view_pop_empty;

    public View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            return true;
        }
    };

    public BasePopWindow(Context context) {
        this.mContext = context;
        TAG = getClass().getSimpleName();

        // 使用 ViewBinding 代替 LayoutInflater.inflate()
        binding = getViewBinding(LayoutInflater.from(context));

        setContentView(binding.getRoot());

        setWidth(mContext.getResources()
                .getDimensionPixelSize(R.dimen.dp_x_823));
        setHeight(mContext.getResources()
                .getDimensionPixelSize(R.dimen.dp_y_423));

        setOutsideTouchable(false);

        /*view_pop_empty = findViewById(R.id.view_pop_empty);
        if (view_pop_empty != null) {
            view_pop_empty.setOnClickListener(view -> onEmptySpaceClick());
            view_pop_empty.setOnLongClickListener(longClickListener);
        }*/

        init();
        setListener();
        setTouchInterceptor(this);
    }

    @Override
    public void showAtLocation(View parent, int gravity, int x, int y) {
        super.showAtLocation(parent, gravity, x, y);
    }

    @Override
    public void dismiss() {
        super.dismiss();
    }

    @Override
    public void onClick(View v) {

    }

    // 抽象方法,让子类提供 ViewBinding 实例
    protected abstract T getViewBinding(LayoutInflater inflater);


    public abstract void init();

    public abstract void setListener();

    protected void onCloseClick() {
        dismiss();
    }

    protected void onEmptySpaceClick() {
        dismiss();
    }

    protected final <T extends View> T findViewById(@IdRes int id) {
        return rootView.findViewById(id);
    }

}