在我的活动中,我有一个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中时,它们仍会显示在“建议”中。我的目标(赏金的目的)是防止相同的特定字符出现在建议中。
答案 0 :(得分:1)
您应该使用InputFilter来限制Edittext
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[]{filter});
答案 1 :(得分:0)
似乎模拟器不支持textNoSuggestions,以及相应的FLAG(TYPE_TEXT_FLAG_NO_SUGGESTIONS)。这真是令人讨厌,但是嘿:你不是为模拟器用户开发的,你不应该全神贯注于此,它几乎可以在所有设备上正常工作。
(请注意,此标志仅在API级别5中可用)
答案 2 :(得分:0)
我们可以在布局xml文件中执行此操作,并以简单的方式实现您所要求的内容,插入行
android:numeric="your custom elements"
android:digits="your custom elments"
android:inputType="your custom elements"
当你实现这些时,你就可以输入你想要的单词。