这是我的设置
<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字段上,直到用户更正它为止。
任何指针/帮助赞赏!
答案 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();
我希望这会有所帮助