如图
代码部分:
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@Overridepublic 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@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(mContext).inflate(R.layout.item_pay_password, parent, false);return new ViewHolder(view);}@Overridepublic 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;}@Overridepublic 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