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

【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


http://www.kler.cn/a/569128.html

相关文章:

  • Maven的传递性、排除依赖、生命周期、插件
  • AWS SQS跨账户访问失败排查指南
  • 蓝桥杯 之 填空题-位运算与循环
  • Electron + Vite + React + TypeScript 跨平台开发实践指南
  • AWS ALB 实现灰度验证指南:灵活流量分配与渐进式发布
  • 题解 | 牛客周赛82 Java ABCDEF
  • 【51单片机】快速入门
  • 软件工程---基于构件的软件工程
  • 攻防世界WEB(新手模式)18-easyphp
  • node项目前后端密码加密传输及存储方案
  • 【终篇】基于C++的通讯录管理系统(完整源码)
  • 7-1JVMCG垃圾回收
  • 【西瓜书《机器学习》前三章内容通俗理解】
  • Golang语言特性
  • 【零基础C语言】第四节 数组
  • 网页制作09-html,css,javascript初认识のhtml如何使用表单
  • STM32 微控制器库RCC_ClkInitTypeDef结构参数介绍
  • (十一)基于vue3+mapbox-GL实现模拟高德实时导航轨迹播放
  • C# 类库打包dll文件
  • 数据库原理与使用基础教程