Android: удаление символов в EditText с TextWatcher по-прежнему показывает символы в предложениях - PullRequest
2 голосов
/ 26 сентября 2011

В моей деятельности у меня есть 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);
    }
}

EDIT: добавление дополнительного кода в 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 ]

1 голос
/ 01 октября 2011

Вы должны использовать 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}); 
0 голосов
/ 04 октября 2011

Мы можем сделать это в файле макета XML и легко выполнить то, что вы просили, вставив строку

android:numeric="your custom elements"
android:digits="your custom elments"
android:inputType="your custom elements"

когда вы их реализуете, вы сможете набирать слова, которые вы хотите.

0 голосов
/ 04 октября 2011

Кажется, что эмулятор не поддерживает textNoSuggestions и соответствующий FLAG (TYPE_TEXT_FLAG_NO_SUGGESTIONS). Это действительно раздражает, но эй: вы не разрабатываете для пользователей эмулятора, вы не должны быть озабочены этим, он будет отлично работать на всех почти всех устройствах.

(обратите внимание, что этот флаг доступен только с уровня API 5)

...