循环替换有限长度的EditText内容

Cyclical replacement the content of EditText with the limited length

例如,我的 EditText 的长度限制为两个字符。输入第一个和第二个字母时就可以了。但是当我们尝试输入第三个字母时,第一个字母应该被它替换。下一个字母应该替换第二个,以此类推。我该怎么做。

尝试在您的编辑文本上使用 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) {

        }
    });

试试这个

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) {

       }
    });