wjc
2023-06-19 a1ac20d9cbe90b566bffe3ed39a6e07700c3248f
app/src/main/java/com/hdl/photovoltaic/widget/ConfirmationInputDialog.java
New file
@@ -0,0 +1,251 @@
package com.hdl.photovoltaic.widget;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.text.TextUtils;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.constraintlayout.widget.ConstraintSet;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.databinding.LoadingConfirmInputBinding;
import com.hdl.photovoltaic.utils.KeyboardStateObserverUtils;
/**
 * 输入确认框
 */
public class ConfirmationInputDialog extends Dialog {
    public ConfirmationInputDialog(@NonNull Context context) {
        super(context, R.style.Custom_AlertDialog);
        this.mContext = context;
    }
    private final Context mContext;
    private onNoOnclickListener noOnclickListener;//取消按钮被点击了的监听器
    private onYesOnclickListener yesOnclickListener;//确定按钮被点击了的监听器
    private LoadingConfirmInputBinding viewBinding;
    private String titleStr, yesStr, noStr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        viewBinding = LoadingConfirmInputBinding.inflate(getLayoutInflater());
        setContentView(viewBinding.getRoot());
//        setCancelable(true);//系统后退可以取消
        //空白处不能取消动画
        setCanceledOnTouchOutside(false);
        //初始化界面控件
        initView();
        //初始化界面数据
        initData();
        //初始化界面控件的事件
        initEvent();
        //在界面中使用
        KeyboardStateObserverUtils.getKeyboardStateObserver((Activity) mContext).setKeyboardVisibilityListener(new KeyboardStateObserverUtils.OnKeyboardVisibilityListener() {
            @Override
            public void onKeyboardShow(int h) {
                ConstraintSet cs = new ConstraintSet();
                cs.clone(viewBinding.loadingParentCl);
//                (viewBinding.loadingConfirmationRl.getTop()-dip2px(h))
                cs.connect(R.id.loading_confirmation_rl, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, px2dip(h));//
                //应用约束
                cs.applyTo(viewBinding.loadingParentCl);
//                FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) viewBinding.loadingParentCl.getLayoutParams();
//                lp.bottomMargin = px2dip(h);
//                viewBinding.loadingParentCl.setLayoutParams(lp);
            }
            @Override
            public void onKeyboardHide(int h) {
                ConstraintSet cs = new ConstraintSet();
                cs.clone(viewBinding.loadingParentCl);
                cs.connect(R.id.loading_confirmation_rl, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, px2dip(h));//
                //应用约束
                cs.applyTo(viewBinding.loadingParentCl);
            }
        });
    }
    /**
     * 自定义"标题"文本
     *
     * @param title 内容
     */
    public void setTitle(String title) {
        if (TextUtils.isEmpty(title)) {
            return;
        }
        titleStr = title;
        if (viewBinding != null) {
            viewBinding.loadingConfirmationTitleTv.setText(titleStr);
        }
    }
    /**
     * 自定义"确认"文本
     *
     * @param confirm 内容
     */
    public void setConfirmation(String confirm) {
        if (TextUtils.isEmpty(confirm)) {
            return;
        }
        yesStr = confirm;
        if (viewBinding != null) {
            viewBinding.dialogConfirmTv.setText(yesStr);
        }
    }
    /**
     * 自定义"取消"文本
     *
     * @param cancel 内容
     */
    public void setCancel(String cancel) {
        if (TextUtils.isEmpty(cancel)) {
            return;
        }
        noStr = cancel;
        if (viewBinding != null) {
            viewBinding.dialogCancelTv.setText(noStr);
        }
    }
    private void initEvent() {
        viewBinding.dialogCancelLy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (noOnclickListener != null) {
                    noOnclickListener.Cancel();
                }
            }
        });
        viewBinding.dialogConfirmLy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (yesOnclickListener != null) {
                    yesOnclickListener.Confirm(viewBinding.loadingConfirmationInputEt.getText().toString());
                }
            }
        });
        viewBinding.loadingConfirmationClickTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.setSelected(!v.isSelected());
                if (v.isSelected()) {
                    viewBinding.loadingConfirmationInputEt.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                    viewBinding.loadingConfirmationHideIv.setImageDrawable(AppCompatResources.getDrawable(mContext, R.drawable.show));
                } else {
                    viewBinding.loadingConfirmationInputEt.setTransformationMethod(PasswordTransformationMethod.getInstance());
                    viewBinding.loadingConfirmationHideIv.setImageDrawable(AppCompatResources.getDrawable(mContext, R.drawable.hide));
                }
                //设置光标位置
                viewBinding.loadingConfirmationInputEt.setSelection(viewBinding.loadingConfirmationInputEt.getText().length());
            }
        });
    }
    /**
     * 初始化界面控件的显示数据
     */
    private void initData() {
        if (viewBinding == null) {
            return;
        }
        //如果用户自定了title和message
        if (!TextUtils.isEmpty(titleStr)) {
            viewBinding.loadingConfirmationTitleTv.setText(titleStr);
        }
        //如果设置按钮文字
        if (!TextUtils.isEmpty(yesStr)) {
            viewBinding.dialogConfirmTv.setText(yesStr);
        }
        if (!TextUtils.isEmpty(noStr)) {
            viewBinding.dialogCancelTv.setText(noStr);
        }
    }
    private void initView() {
    }
    /**
     * 设置取消按钮监听
     *
     * @param onNoOnclickListener -
     */
    public void setNoOnclickListener(onNoOnclickListener onNoOnclickListener) {
        if (onNoOnclickListener != null) {
            this.noOnclickListener = onNoOnclickListener;
        }
    }
    /**
     * 设置确定按钮监听
     *
     * @param yesOnclickListener -
     */
    public void setYesOnclickListener(onYesOnclickListener yesOnclickListener) {
        if (yesOnclickListener != null) {
            this.yesOnclickListener = yesOnclickListener;
        }
    }
    public interface onNoOnclickListener {
        void Cancel();
    }
    public interface onYesOnclickListener {
        void Confirm(String str);
    }
    /**
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
     */
    private int dip2px(float dpValue) {
        if (mContext == null) {
            return 0;
        }
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    private int px2dip(float pxValue) {
        final float scale = mContext.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }
}