【发布时间】: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