Intereting Posts
Создание двусторонней привязки с привязкой данных Android Значок навигационного ящика (ic_drawer) не отображается Не разрешено запускать сервис Intent X без разрешения Y Эмулятор студии Android не запускается с сообщением об ошибке ограничения памяти Страница Curl Animation в андроиде? Получение ERR_CACHE_MISS на window.open Java.lang.IllegalStateException: невозможно изменить тег фрагмента Отладка пользовательского вида в редакторе графических макетов ADT Does System.currentTimeMillis () возвращает время UTC? Android: пример кода для использования собственного VPN-соединения в Android 4.0 с использованием API VPNService Слева выровняйте текст внутри кнопки в Android Google Maps отлично работает на Android, но я все равно получаю сообщение об ошибке «Не удалось найти класс« maps.ik », на который ссылается метод methods.z.ag.a" Как выровнять linearlayout с вертикальным центром? Android: какая разница между setFlags и addFlags для намерения Пользовательский запрос getview не вызывается

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); }