Как удалить мгновенно SPACE из edittext, если пользователь нажимает пробел?

У меня есть edittext и текстовый анализатор, который следит за появлением SPACE или нет. Если это SPACE, я хотел бы удалить это мгновенно. Или, если это пространство, которое я хочу удостовериться, что оно не отображается, но указывается каким-то образом (seterror, toast) для пользователя, это пространство не разрешено.

edittext.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) {} }); 

Я не могу определить onkeydown в методе afterTextChaned, так как он дает мне ошибку.

  public boolean onKeyDown(int keyCode, KeyEvent event) { super.onKeyDown(keyCode, event); if (keyCode == KeyEvent.KEYCODE_SPACE) { } } 

Таким образом, он не работает (синтаксическая ошибка, неуместная конструкция для int keyCode .

Спасибо вам заранее!

Решение, как правило, намного проще:

 @Override public void afterTextChanged(Editable s) { String result = s.toString().replaceAll(" ", ""); if (!s.toString().equals(result)) { ed.setText(result); ed.setSelection(result.length()); // alert the user } } 

У этого не должно быть проблем с предыдущими попытками.

 boolean editclicked =false ; edittext.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { editclicked = false ; } public void beforeTextChanged(CharSequence s, int start, int count, int after) {} public void onTextChanged(CharSequence s, int start, int before, int count) { editclicked = true; }); 

Поместите это как отдельную функцию:

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (editclicked) { if (keyCode == KeyEvent.KEYCODE_SPACE) { return false } } else { super.onKeyDown(keyCode, event); } } 

setSelection там, чтобы снова установить курсор в конце вашего EditText :

 editText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {} @Override public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {} @Override public void afterTextChanged(Editable arg0) { if(editText.getText().toString().contains(" ")){ editText.setText(editText.getText().toString().replaceAll(" " , "")); editText.setSelection(editText.getText().length()); Toast.makeText(getApplicationContext(), "No Spaces Allowed", Toast.LENGTH_LONG).show(); } }}); 

Для мгновенного удаления пространства вы можете добиться этого двумя способами.

Одним простым решением вы можете установить цифры в текст редактирования.

 android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 

Второй способ установить фильтр

 EditText.setFilters(new InputFilter[] { filter }); 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.isSpaceChar(source.charAt(i))) { return ""; } } return null; } }