【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