Intereting Posts
Ошибка Android в eclipse: не удалось разрешить целевой «android-xx» Может ли фаза «Обновление библиотеки Android» как-то ускориться? Должен ли я беспокоиться о утечке памяти и использовании WeakReference с Volley в Android Подключитесь к Интернету автоматически Как получить текущее местоположение в google map android Код кинжала, который дает NoClassDefFoundError при запуске Espresso Tests, нормально работает нормально работает Конфигурация с именем «по умолчанию» не найдена. Android Studio Использование TouchScreens для управления игрой Smack throws "NoClassDefFoundError: сбой разрешения: Lorg / jxmpp / util / XmppStringUtils" Android: Как сбросить / очистить настройки приложения во время модульного тестирования? Добавить новый контакт с помощью нескольких телефонных номеров Как редактировать AndroidManifest.xml в PhoneGap 3 Поддержка нескольких активных перекрывающихся поверхностей в Android Создание стойки поиска в android Разработка пользовательского экрана блокировки

EditText – изменение текста при наборе текста

Мне нужно заменить текст внутри EditText во время ввода: Пример: если пользователь нажал «A», он будет храниться в буфере, а в EditText вместо него отображается «D» (похоже, он нажал «D»). Теперь я могу прочитать нажатый символ, но я не могу отобразить символ в et, чтобы избежать stackoverflow:

final EditText et = (EditText) findViewById(R.id.editTexts); final TextView tv = (TextView) findViewById(R.id.textView2); et.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s){} public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { if(s.length() > 0) { tv.setText(s.toString().substring(s.length()-1)); et.setText(""); } } }); 

Solutions Collecting From Web of "EditText – изменение текста при наборе текста"

Вы можете изменить его по мере необходимости ::

 public class SampleActivity extends Activity { TextWatcher tt = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final EditText et = (EditText) findViewById(R.id.editText1); final TextView tv = (TextView) findViewById(R.id.textView1); tt = new TextWatcher() { public void afterTextChanged(Editable s){ et.setSelection(s.length()); } public void beforeTextChanged(CharSequence s,int start,int count, int after){} public void onTextChanged(CharSequence s, int start, int before, int count) { et.removeTextChangedListener(tt); et.setText(et.getText().toString().replace("A", "C")); et.addTextChangedListener(tt); } }; et.addTextChangedListener(tt); } } 

Чтобы изменить текст в интерактивном режиме, вам необходимо зарегистрировать TextWatcher . Но попытка изменить текст внутри наблюдателя создает дополнительные вызовы наблюдателю. Мой взлом – временно удалить наблюдателя, когда я хочу изменить текст, и перерегистрировать его сразу после

  mEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { mEditText.removeTextChangedListener(this); mEditText.setText(//TODO change whatever you like here); mEditText.setSelection(editable.length()); //moves the pointer to end mEditText.addTextChangedListener(this); }