EditText setError不会停留在框中

时间:2012-02-02 15:51:54

标签: android android-widget android-edittext

这是我的设置

<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”开头,则错误消息将保留在edittext字段上,直到用户更正它为止。

任何指针/帮助赞赏!

3 个答案:

答案 0 :(得分:0)

尝试此操作来限制EditText输入:

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

答案 1 :(得分:0)

确保在EditText为空时处理按下的删除键:https://stackoverflow.com/a/13983097/832776

答案 2 :(得分:0)

当用户输入的文本多于&#34; maxLength&#34;或删除一个空字段。这似乎是一个操作系统错误,我尝试了很多方法,最终得到了一个解决方法如下:

假设您有许多文本字段和提交按钮,当用户按提交时,使用自己的文本重置这些文本字段以再次触发验证,例如:

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();

我希望这会有所帮助