以下是我的设置
<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”开头,则错误消息将一直停留在编辑文本字段中,直到用户进行更正。
欢迎任何指针/帮助!