Android:使用TextWatcher删除EditText中的字符仍然会在建议中显示字符

时间:2011-09-26 05:16:52

标签: android android-layout android-edittext android-input-method

在我的活动中,我有一个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中时,它们仍会显示在“建议”中。我的目标(赏金的目的)是防止相同的特定字符出现在建议中。

enter image description here

3 个答案:

答案 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"

当你实现这些时,你就可以输入你想要的单词。