当前位置: 首页 > news >正文

【Android】安卓付款密码输入框、支付密码输入框

如图

代码部分:

public class PayPasswordDialog extends AppCompatDialogFragment {
    private String mPayPass = "";
    private String mTitle, mMoney;
    private final TextView[] mPayPassTextViewArray = new TextView[6];
    private List<Integer> mPayPassList;
    private PayPassDialogAdapter adapter;
    private RecyclerView mPayPassRecyclerView;
    private TextView tvTitle, tvMoney;
    private ImageView ivClose;

    public static PayPasswordDialog newInstance() {
        Bundle args = new Bundle();
        PayPasswordDialog fragment = new PayPasswordDialog();
        fragment.setArguments(args);
        return fragment;
    }
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        Dialog dialog = new Dialog(getActivity(), R.style.BottomDialogFragment);
        dialog.setContentView(R.layout.dialog_pay_pass);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);

        Window window = dialog.getWindow();
        if (window != null) {
            WindowManager.LayoutParams lp = window.getAttributes();
            lp.gravity = Gravity.BOTTOM;
            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
            window.setAttributes(lp);
            window.setBackgroundDrawableResource(android.R.color.transparent);
        }
        initView(dialog);
        return dialog;
    }

    private void initView(Dialog dialog) {
        mPayPassRecyclerView = dialog.findViewById(R.id.recycler_view);
        tvTitle = dialog.findViewById(R.id.tv_title);
        tvMoney = dialog.findViewById(R.id.tv_money);
        ivClose = dialog.findViewById(R.id.iv_close);

        mPayPassTextViewArray[0] = dialog.findViewById(R.id.tv_pass1);
        mPayPassTextViewArray[1] = dialog.findViewById(R.id.tv_pass2);
        mPayPassTextViewArray[2] = dialog.findViewById(R.id.tv_pass3);
        mPayPassTextViewArray[3] = dialog.findViewById(R.id.tv_pass4);
        mPayPassTextViewArray[4] = dialog.findViewById(R.id.tv_pass5);
        mPayPassTextViewArray[5] = dialog.findViewById(R.id.tv_pass6);

        initData();
    }

    private void initData(){
        if (!TextUtils.isEmpty(mMoney)){
            tvMoney.setText(mMoney);
        }
        if (!TextUtils.isEmpty(mTitle)){
            tvTitle.setText(mTitle);
        }
        mPayPassList = new ArrayList<>();
        for (int i = 1; i <= 9; i++) {
            mPayPassList.add(i);
        }
        mPayPassList.add(10);
        mPayPassList.add(0);
        mPayPassList.add(12);
        adapter = new PayPassDialogAdapter(mPayPassList, getContext());
        mPayPassRecyclerView.setAdapter(adapter);
        mPayPassRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
        mPayPassRecyclerView.addItemDecoration(new GridSpacingItemDecoration(3, dp2px(1), true));

        initListeners();
    }

    private void initListeners(){
        ivClose.setOnClickListener(v -> dismiss());
        adapter.setOnItemClickListener(position -> {
            if (position < 9 || position == 10){
                if (mPayPass.length() < 6){
                    mPayPass += mPayPassList.get(position);
                    mPayPassTextViewArray[mPayPass.length() - 1].setText("*");
                }
                if (mPayPass.length() == 6){
                    if (onFinishPayClickListener != null){
                        onFinishPayClickListener.onPassFinish(this, mPayPass);
                    }
                }
            } else if (position == 11) {
                if(!mPayPass.isEmpty()){
                    mPayPassTextViewArray[mPayPass.length()-1].setText("");//去掉界面*
                    mPayPass = mPayPass.substring(0,mPayPass.length()-1);//删除一位
                }
            }
        });
    }

    public interface OnFinishPayClickListener{
        void onPassFinish(PayPasswordDialog dialog, String payPass);
    }
    private OnFinishPayClickListener onFinishPayClickListener;
    public PayPasswordDialog setOnFinishPayClickListener(OnFinishPayClickListener onFinishPayClickListener) {
        this.onFinishPayClickListener = onFinishPayClickListener;
        return this;
    }


    private int dp2px(int dp) {
        return (int) (getContext().getResources().getDisplayMetrics().density * dp + 0.5f);
    }

    public PayPasswordDialog setMoney(String mMoney) {
        this.mMoney = mMoney;
        return this;
    }
    public PayPasswordDialog setTitle(String mTitle) {
        this.mTitle = mTitle;
        return this;
    }
}
public class PayPassDialogAdapter extends RecyclerView.Adapter<PayPassDialogAdapter.ViewHolder> {
    private final List<Integer> mData;
    private final Context mContext;
    public PayPassDialogAdapter(List<Integer> data, Context context) {
        mData = data;
        mContext = context;
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_pay_password, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Integer integer = mData.get(position);
        if (integer == 10){
            holder.iv_delete.setVisibility(View.GONE);
            holder.tv_num.setText("");
            holder.itemView.setBackgroundColor(Color.parseColor("#E1E5EA"));
        }
        else if (integer == 12){
            holder.iv_delete.setVisibility(View.VISIBLE);
            holder.tv_num.setText("");
            holder.itemView.setBackgroundColor(Color.parseColor("#E1E5EA"));
        }
        else {
            holder.iv_delete.setVisibility(View.GONE);
            holder.tv_num.setText(String.valueOf(integer));
        }

        holder.itemView.setOnClickListener(v -> {
            if (mOnItemClickListener != null){
                mOnItemClickListener.onItemClick(position);
            }
        });
    }

    public interface OnItemClickListener{
        void onItemClick(int position);
    }
    private OnItemClickListener mOnItemClickListener;
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    @Override
    public int getItemCount() {
        return mData == null ? 0 : mData.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        ImageView iv_delete;
        TextView tv_num;
        public ViewHolder(View view) {
            super(view);
            iv_delete = view.findViewById(R.id.iv_delete);
            tv_num = view.findViewById(R.id.tv_num);
        }
    }
}

源码:

gitee

github

相关文章:

  • 基于PLC的智能窗控制系统设计
  • Spring Boot 拦截器(Interceptor)
  • 目标检测——数据处理
  • 嵌入式晶振细究
  • 《深度揭秘:生成对抗网络如何重塑遥感图像分析精度》
  • 2025年2月个人工作生活总结
  • 网络层IP协议
  • C++—类与对象(中)
  • JAVA笔记【一】
  • 张雪峰教育观点及争议分析
  • 【java】@Transactional导致@DS注解切换数据源失效
  • 为AI聊天工具添加一个知识系统 之128 详细设计之69 编程 核心技术:Cognitive Protocol Language 之1
  • AutoMQ:无需 Cruise Control 实现 Kafka 的自动分区再平衡
  • GitLab 密钥详解:如何安全地使用 SSH 密钥进行身份验证
  • 用Python之requests库调用大型语言模型(LLM)API的流式输出与非流式输出比较
  • [C#]C#移动文件报错完全限定文件名必须少于 260 个字符,并且目录名必须少于 248 个字符
  • 新版的 distrobox 首先需要:设置密码
  • Spring Boot问题总结
  • deepseek+mermaid【自动生成流程图】
  • 独立开发者的内容营销教程
  • ps个人主页设计/百度seo优化软件
  • wordpress站长/小程序开发流程详细
  • wordpress添加商品画廊/东莞seo优化团队
  • 网站建设推广新闻/免费发帖推广的平台
  • 网站界面排版/简易的旅游网页制作
  • c .net怎么做网站/石家庄seo按天扣费