Циклическая замена содержимого EditText с ограниченной длиной - PullRequest
0 голосов
/ 24 сентября 2019

Например, у меня есть EditText с ограничением длины в два символа.Когда первая и вторая буквы введены, все в порядке.Но когда мы попытаемся ввести третью букву, первую букву следует заменить на нее.Следующая буква должна заменить вторую и так далее по кругу.Как я могу сделать это.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Попробуйте использовать TextWatcher для редактирования текста для достижения цели

editText.addTextChangedListener(new TextWatcher() {

        private int lastModifiedIndex = 1;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (s.length() > 2) {
                char toReplace = s.charAt(s.length() - 1);
                if (lastModifiedIndex == 0) {
                    editText.setText("" + s.charAt(lastModifiedIndex) + toReplace);
                    lastModifiedIndex = 1;
                    editText.setSelection(s.length());
                } else {
                    editText.setText("" + toReplace + s.charAt(lastModifiedIndex));
                    lastModifiedIndex = 0;
                    editText.setSelection(s.length());
                }
            } else {
                lastModifiedIndex = 1;
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
0 голосов
/ 25 сентября 2019

Попробуйте это

editText.addTextChangedListener(new TextWatcher() {
        private int charLimit = 5;
        private int position = 5;
        private String newSequence;

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            if (s.length() > charLimit ) {

                if (position == charLimit) {
                    newSequence = s.subSequence(s.length()-1, s.length()).toString() +
                            s.subSequence(1, charLimit);
                        position = 1;

                } else {
                    position++;
                    newSequence = s.subSequence(0, position).toString() +
                            s.subSequence(position+1, s.length());
                }

                editText.setText(null);
                editText.setText(newSequence);
                editText.setSelection(position);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

       }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...