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

这是我的设置

<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 字段中,直到用户更正为止。

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

【问题讨论】:

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

标签: android android-widget android-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://stackoverflow.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();
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多