inputType =密码,不能删除

时间:2019-02-11 13:49:17

标签: android

我为用户名的EditText和密码的EditText做了相同的addTextChangedListener。我希望风险用户在其长度达到限制字符数时输入更多。因此,我尝试通过烤面包警告用户,并删除他们输入的新字符。这是代码`

 ETcreateusername.addTextChangedListener(new TextWatcher() {
        @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(ETcreateusername.getText().length()>15){
                ETcreateusername.dispatchKeyEvent(new KeyEvent(
                        KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
                showToast();
            }
        }
        private void showToast() {
            LayoutInflater inflater = getLayoutInflater();
            View layout = inflater.inflate(R.layout.toast_username,(ViewGroup)findViewById(R.id.toast_root));
            Toast toast= new Toast(getApplicationContext());
            toast.setGravity(Gravity.TOP , 0, 800);
            toast.setDuration(Toast.LENGTH_SHORT);
            toast.setView(layout);
            toast.show();
        }
        @Override
        public void afterTextChanged(Editable s) {
        }
    });

对于用户名的EditText,它可以完美地工作。但是,只要我在密码的EditText中输入太多字符,该应用就会崩溃,仅仅是因为其inputType是password。谁能告诉我原因,以及如何解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:0)

我认为这不是您要尝试执行的最佳实现。也许如果您添加某种提示来说明最小字符和最大字符是什么,则可以在xml中设置编辑文本的最大字符长度,如下所示:

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/et_user"
                maxLenght="15" // This line
                android:layout_width="match_parent"
                android:hint="@string/login_hint_document"
                android:inputType="number" />

答案 1 :(得分:0)

我的猜测是,您正在弄乱用于隐藏密码字符的逻辑。您应该尝试将逻辑移至beforeTextChanged方法。感觉更安全