edittext,自定义键盘和textWatcher

时间:2018-03-10 21:42:24

标签: android

我在一个包含9个edittext和一个自定义键盘的应用程序上工作完美,但是当我向我的editext添加一个textWatcher时,数字将被反转,例如,如果我在edittext1中插入值14它将是41我也想要如果我在9中的edittext中有一个值我不能插入另一个editext剩余的代码,如果它的工作为0 .... 9例如我在edittext1中插入值1并且我想插入值14 in edittext2我不能因为1重复。如果你请我帮助我,我在开发android中是负责任的,这里是我使用的代码

   public void editTextWatcher(final EditText edt) {
    edt.addTextChangedListener(new TextWatcher() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @SuppressLint("ResourceAsColor")
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void afterTextChanged(Editable s) {

            edt.removeTextChangedListener(this);
            edt.setText("");
            edt.addTextChangedListener(this);

            ArrayList<String> texts = new ArrayList<String>();
            texts.add(et1.getText().toString());
            texts.add(et2.getText().toString());
            texts.add(et3.getText().toString());
            texts.add(et4.getText().toString());
            texts.add(et5.getText().toString());
            texts.add(et6.getText().toString());
            texts.add(et7.getText().toString());
            texts.add(et8.getText().toString());
            texts.add(et9.getText().toString());

            for (String text : texts) {
                if (s.toString().equals(text)) {
                    if (s.toString().equals("")) {
                        return;
                    }

                    AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
                    animation1.setDuration(70);
                    animation1.setStartOffset(500);
                    animation1.setFillAfter(true);
                    edt.startAnimation(animation1);
                    edt.removeTextChangedListener(this);
                    edt.addTextChangedListener(this);
                    afficheerr1();

                    return;

                } else {

                }
            }

            edt.removeTextChangedListener(this);
            edt.setText(s.toString());
            edt.addTextChangedListener(this);

        }
    });
}

et le code dans onCreate

  editTextWatcher(et1);
    editTextWatcher(et2);
    editTextWatcher(et3);
    editTextWatcher(et4);
    editTextWatcher(et5);
    editTextWatcher(et6);
    editTextWatcher(et7);
    editTextWatcher(et8);
    editTextWatcher(et9);

1 个答案:

答案 0 :(得分:0)

我相信你可以删除这些行:

edt.removeTextChangedListener(this);
edt.setText("");
edt.addTextChangedListener(this);

这里的问题是你要删除文本并将光标跳转到字符串的开头。

另一个选项是在设置文本后将光标设置为结束:

...

edt.removeTextChangedListener(this);
edt.setText(s.toString());
edt.setSelection(et.getText().length());    // move cursor to the end of string
edt.addTextChangedListener(this);

...
不过,目前还不清楚这应该做什么以及你在问什么。