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