EditText的setError无法停留在框内

3

以下是我的设置

<EditText
            android:id="@+id/inputNo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="@string/inputHintText"
            android:inputType="textCapCharacters"
            android:maxLength="10"
            android:textColor="#383838" />

以下是Java代码:

final EditText inputNo = (EditText)findViewById(R.id.inputNo); 

      inputNo.addTextChangedListener(new TextWatcher() {

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

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

        @Override
        public void afterTextChanged(Editable s) 
        {

            if (s.length() > 2)
            {
            if (!s.toString().startsWith("ABCD"))
            {
                inputNo.setError( "Must start with ABCD" );
            }
            }

         }
    });

代码运行良好,直到第10个按键时,在文本框中显示红色错误消息。但是,假设用户仍然在文本框上按下第11个键,则错误消息将消失并且不会停留在文本框上。
我意识到的一件事是,输入第10个字符后,afterTextChanged()方法不会被调用,这意味着addTextChangedListener实际上没有监听第10个字符之后的输入键,因为我们在EditText中定义了android:maxLength="10"。
如何解决这个问题?我的期望结果是,如果输入不以“ABCD”开头,则错误消息将一直停留在编辑文本字段中,直到用户进行更正。
欢迎任何指针/帮助!

1
我也注意到了这一点。在我的情况下,EditText的值为空是无效的。如果错误信息一直保留到用户输入内容会更加直观。目前,当EditText没有内容并且用户按下退格键时,错误信息会消失。 - Boris Burtin
3个回答

0

尝试使用以下代码限制EditText输入:

TextView editEntryVew = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(10);
editEntryView.setFilters(filterArray );

你是什么意思 FilterArray[0] = new InputFilter.LengthFilter(10); - waqaslam
我尝试过将XML中的最大长度限制移除,但在第10个笔画后仍然看到错误图标和消息消失。 - lazyguy

0

0
当用户输入的文本超过“maxLength”或删除空字段时,问题就会发生。这似乎是一个操作系统的错误,我尝试了很多方法,最终得出了以下解决方法:
假设您有许多文本字段和一个提交按钮,当用户按下提交按钮时,请使用它们自己的文本重置这些文本字段以再次触发验证,例如:
textField1.setText(textField1.getText()) 
textField2.setText(textField2.getText()) 

if (TextUtils.isEmpty(textField1.getError()) && TextUtils.isEmpty(textField2.getError())) 
        // submit
else 
        Toast.makeText(mContext, "Please correct invalid fields", Toast.LENGTH_SHORT).show();

希望这可以帮到你


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接