Edit text for OTP with Each letter in separate positions

后端 未结 19 1041
别跟我提以往
别跟我提以往 2020-12-13 00:25

I\'m working on a application which asks for OTP when user want to reset his password for which I need a text like the one in attached Image... What I thought to proceed wi

19条回答
  •  醉酒成梦
    2020-12-13 00:47

    You can try this if you want to add some extra logic for delete the OTP, i create it based on the answer from A.R. make sure you set maxlength = 2 for all edittext

    public class GenericTextWatcher implements TextWatcher
    {
        private View view;
        private GenericTextWatcher(View view)
        {
            this.view = view;
        }
        @Override
        public void afterTextChanged(Editable editable) {
            // TODO Auto-generated method stub
            String text = editable.toString();
            switch (view.getId()) {
    
                case R.id.etOTP1:
                    if (text.length() > 1) {
                        etOTP1.setText(String.valueOf(text.charAt(0)));
                        etOTP2.setText(String.valueOf(text.charAt(1)));
                        etOTP2.requestFocus();
                        etOTP2.setSelection(etOTP2.getText().length());
                    }
                    break;
                case R.id.etOTP2:
                    if (text.length() > 1){
                        etOTP2.setText(String.valueOf(text.charAt(0)));
                        etOTP3.setText(String.valueOf(text.charAt(1)));
                        etOTP3.requestFocus();
                        etOTP3.setSelection(etOTP3.getText().length());
                    }
                    if (text.length() == 0){
                        etOTP1.requestFocus();
                        etOTP1.setSelection(etOTP1.getText().length());
                    }
                    break;
                case R.id.etOTP3:
                    if (text.length() > 1){
                        etOTP3.setText(String.valueOf(text.charAt(0)));
                        etOTP4.setText(String.valueOf(text.charAt(1)));
                        etOTP4.requestFocus();
                        etOTP4.setSelection(etOTP4.getText().length());
                    }
                    if (text.length() == 0){
                        etOTP2.requestFocus();
                        etOTP2.setSelection(etOTP2.getText().length());
                    }
                    break;
                case R.id.etOTP4:
                    if (text.length() == 0){
                        etOTP3.requestFocus();
                        etOTP3.setSelection(etOTP3.getText().length());
                    }
                    break;
            }
        }
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
    
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
    }
    

提交回复
热议问题