在我的活动中,我有一个 EditText 来捕获文件名。我正在使用 TextWatcher 来防止用户输入我不希望他们在文件名中使用的某些字符。本质上,我只希望用户输入以下字符:[a-zA-Z_0-9]。
@Override
public void afterTextChanged(Editable text) {
String textStr = text.toString();
int length = text.length();
if (!Pattern.matches("\\w*", textStr)) {
text.delete(length-1, length);
}
}
编辑:在 onCreate(...) 添加更多代码
fileNameEditText = (EditText)findViewById(R.id.UploadPhoto_fileNameEditText);
fileNameEditText.addTextChangedListener(this);
在布局 xml 文件中
<EditText
android:id="@+id/UploadPhoto.fileNameEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20sp"
android:layout_marginRight="10sp"
android:layout_toRightOf="@id/UploadPhoto.fileNameLabel"/>
通过防止用户输入诸如“\”和“.”之类的内容,这非常有效。我遇到的问题是,如果他们键入这些字符,它们就会出现在单词建议框中。这有点烦人,因为如果您尝试使用退格键删除一个字符,它会首先从建议中删除(即使该字符没有出现在 EditText 框中)。
您如何防止不需要的字符出现在单词建议框中?
请参阅下面的屏幕截图。请注意,“-”(连字符)出现在建议框中,但没有出现在 EditText 中。另请注意,在连字符之后的建议框中还有另一个有效字符,该字符也未显示在 EditText 中。这实质上会阻止用户输入更多文本,直到他们删除连字符,即使它不在 EditText 中。
更新:同样的问题出现了,可以通过使用 InputFilter 而不是 TextWatcher 来重现。
更新:我想澄清一下,我的目标不是完全压制这些建议。问题是当您阻止特定字符出现在 EditText 中时,它们仍会出现在建议中。我的目标(赏金的目的)是防止相同的特定字符出现在建议中。