2011-02-07 2 views
9

Я должен делать что-то очевидное, но я не могу понять, что это такое. Я просто пытаюсь вставить символ в редактируемый:Невозможно вставить в Редактируемый

@Override 
public void afterTextChanged(Editable s) { 
    Log.d(TAG, "inserting space at " + location); 
    s.insert(location, " "); 
    Log.d(TAG, "new word: '" + s + "'"); 
} 

Но никогда не меняется. Строка 'достаточно длинная, потому что я печатаю ее, и она выглядит хорошо. Если я вызываю Editable.clear(), он очищается, и я могу заменить несколько символов с помощью Editable.replace(). Идеи?

ответ

25

Я нашел проблему; Я устанавливаю inputType как «число», и поэтому добавление пространства молча проваливается.

+0

Есть ли способ добавить пробел в EditText с inputType «number»? –

+0

Да, см. Мой ответ ниже; он включает временную очистку входных фильтров. – BeccaP

+1

Вместо 'number' вы можете использовать' android: inputType = "phone" '. Он отображает числа, но с небольшими буквами рядом с ними. Я бы сказал, что обычные пользователи не узнают разницу. – Syex

1

Try:

Editable s = getLatestEditable(); 
Log.d(TAG, "inserting space at " + location); 
s.insert(location, " "); 
Log.d(TAG, "new word: '" + s + "'"); 
+0

К сожалению, нет, getEditable() мой собственный метод. На самом деле это обратный вызов из TextWatcher.afterTextChanged (Editable s) –

9

Чтобы отредактировать редактируемые с помощью фильтров ввода, просто сохраните текущие фильтры, очистите их, отредактируйте текст, а затем восстановите фильтры.

Ниже приведен пример кода, который работал для меня:

@Override 
public void afterTextChanged(Editable s) { 
    InputFilter[] filters = s.getFilters(); // save filters 
    s.setFilters(new InputFilter[] {});  // clear filters 
    s.insert(location, " ");    // edit text 
    s.setFilters(filters);     // restore filters 
} 
+0

Это сработало для меня! Гораздо лучшее решение, чем принятый хакерский ответ. – CrashproofCode

Смежные вопросы