android android-edittext keylistener textwatcher

Cómo manejar la tecla Enter usando TextWatcher en Android



android-edittext keylistener (3)

prueba esto

protected View.OnKeyListener onEnter = new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { //here do what you want } return false; // very important } };

Estoy trabajando en Android. Anteriormente utilicé onKeyListener para manejar acciones específicas sobre eventos clave.

Sin embargo, esta forma parece no resolver mi problema ya que casi toda la clave se desactivará una vez que haya implementado ese oyente en mi EditText . Después de leer algunos temas en SO, sé que debería usar TextWatcher en su lugar, pero aún me pregunto cómo manejar el evento de la tecla ENTER en el interior porque los parámetros proporcionados solo son CharSequence , Editable , etc. No encontré ningún parámetro de keyCode .


prueba esto

@Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("/n")) { //enter pressed } }


Creo que esta es la mejor solución, porque puede presionar ''Enter'' en cualquier lugar de su campo EditText y no solo al final de la línea.

edittext.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int st, int ct, int af) { } public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.length() < 1 || start >= s.length() || start < 0) return; // If it was Enter if (s.subSequence(start, start + 1).toString().equalsIgnoreCase("/n")) { // Change text to show without ''/n'' String s_text = start > 0 ? s.subSequence(0, start).toString() : ""; s_text += start < s.length() ? s.subSequence(start + 1, s.length()).toString() : ""; edittext.setText(s_text); // Move cursor to the end of the line edittext.setSelection(s_text.length()); } } });