EditText setError 没有留在盒子上

Posted

技术标签:

【中文标题】EditText setError 没有留在盒子上【英文标题】:EditText setError is not staying on the box 【发布时间】:2012-02-25 06:51:33 【问题描述】:

这是我的设置

<EditText
            android:id="@+id/inputNo"
            android:layout_
            android:layout_
            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 字段中,直到用户更正为止。

任何指针/帮助表示赞赏!

【问题讨论】:

我也注意到了这一点。就我而言,EditText 值为空白是无效的。如果错误一直持续到用户输入某些内容会更直观。目前,当 EditText 没有内容并且用户点击退格键时,它就会消失。 【参考方案1】:

试试这个来限制 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); 是什么意思? 我试过这个并从我的 xml 中删除了最大长度约束,但我仍然看到错误图标和消息在第 10 次笔划后消失。【参考方案2】:

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

【讨论】:

【参考方案3】:

当用户输入的文本超过“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();

希望对你有帮助

【讨论】:

以上是关于EditText setError 没有留在盒子上的主要内容,如果未能解决你的问题,请参考以下文章

更改 EditText.setError() 背景和错误消息 android

EditText.setError()的弹出消息布局看起来很奇怪

“DataBinding”如何检查 xml 中按钮的 onClick 是不是为 editText isEmpty 和 setError

Android setError("error") 在 Textview 中不起作用

如何从editText保存名称和号码并获取这些数据?

有关Android的TextView组件的几个问题