2011-06-19 10 views
10

Ahora manejo la tecla enter en mis campos EditText usando un onEditorActionListener y mirando el Action ID para IME_NULL. Funciona bien para todos mis usuarios excepto uno. Ella tiene un Xperia Arc.Manejar la tecla Enter en EditText en diferentes dispositivos

TextView.OnEditorActionListener keyListener = new TextView.OnEditorActionListener(){ 
    public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { 
    if(actionId == EditorInfo.IME_NULL){ 
     if(((EditText)findViewById(view.getId())) == ((EditText)findViewById(R.id.etUser))){ 
     ((EditText) findViewById(R.id.etPass)).requestFocus(); 
     } 
     if(((EditText)findViewById(view.getId())) == ((EditText)findViewById(R.id.etPass))){ 
     logon(); 
     } 
    } 
    return true; 
    } 
}; 

Después de aprender sobre el tema, he intentado otro enfoque mediante el uso de un onKeyListener y buscando el ACTION_DOWN evento clave a continuación, comprobar si el código clave que coincidía KEYCODE_ENTER.

EditText etUserName = (EditText) findViewById(R.id.etUser); 
etUserName.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View view, int keyCode, KeyEvent event){ 
    if (event.getAction() == KeyEvent.ACTION_DOWN){ 
     switch (keyCode) 
     { 
     case KeyEvent.KEYCODE_DPAD_CENTER: 
     case KeyEvent.KEYCODE_ENTER: 
      if(((EditText)findViewById(view.getId())) == ((EditText)findViewById(R.id.etUser))){ 
      ((EditText) findViewById(R.id.etPass)).requestFocus(); 
      } 
      return true; 
     default: 
      break; 
     } 
    } 
    return false; 
    } 
}); 

Sin duda sobre eso tampoco. Estoy perdido ahora. Hay muchas aplicaciones que manejan la tecla Intro bien. ¿Qué están haciendo de manera diferente?

+0

¿Ha encontrado alguna vez una solución alternativa a este error? De hecho, necesito interceptar la tecla Enter, no solo mantener el texto en una fila. – pgsandstrom

Respuesta

16

me di cuenta de cómo conseguir que funcione.

Tuve que agregar android: singleLine = "true" a la etiqueta EditText en el diseño XML (alternativamente puede establecerlo usando setSingleLine() en el código). Esto obliga al texto de edición a usar solo una línea y el foco irá al siguiente cuadro Editar texto.

+0

TY Tuve que hacer esto en G2X para obtener el siguiente botón para mostrar. – maebe

+0

Gracias por esa solución. Traté de atrapar la tecla enter. Además, traté de pasar al siguiente EditText cuando se pulsa la tecla Intro en el teclado virtual. Hasta que vi esta línea simple que brindó, todo está resuelto. +1 por eso! – detno29

+0

use 'android: maxLines =" 1 "' en su lugar porque 'android: singleLine =" true "' está en desuso – blueware

6

Pruebe esta solución: (no he probado)

Establecer la siguiente propiedad a su EditText

android:imeOptions="actionNext" 

Ahora se puede establecer la siguiente onEditorAction

public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
    if (actionId == EditorInfo.IME_ACTION_NEXT) { 
     // Program Logic Here 
     return true;  
    } 
    return false; 
} 

Para algunos funcionalidad adicional, puede configurar su contraseña EditText a:

android:imeOptions="actionDone" 

Así continuación, puede simplemente tener algo como esto:

TextView.OnEditorActionListener keyListener = new TextView.OnEditorActionListener(){ 
     public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { 
      if(actionId == EditorInfo.IME_ACTION_NEXT) { 
       ((EditText) findViewById(R.id.etPass)).requestFocus(); 
      } 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       logon(); 
      } 
      return true; 
     } 
    }; 
+0

Funciona bien en mi dispositivo, nada en los usuarios. Le di una compilación de prueba con un código de depuración que muestra la identificación de la acción en una vista de texto. nada. No creo que vaya siquiera al método onEditorAction. – Scott

+0

Entonces, ¿no hay identificación de acción, no importa lo que presione? Incluso si es un personaje? – jsw

+0

En onEditorAction, recuerde devolver false si no consume la acción. –

0
(EditText) passwordView = (EditText) findViewById(R.id.password); 
passwordView.setImeOptions(EditorInfo.IME_ACTION_DONE); 
    passwordView.setOnEditorActionListener(new OnEditorActionListener() 
     { 
      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
      { 
       String input; 
       if(actionId == EditorInfo.IME_ACTION_DONE) 
       { 
        input= v.getText().toString(); 
        Toast toast= Toast.makeText(LogIn.this,input, 
          Toast.LENGTH_LONG); 
        toast.setGravity(Gravity.CENTER, 0, 0); 
        toast.show(); 
        return true; 
       } 
       return false; 
      } 
     }); 
+1

Por favor, no solo proporcione el código, sino también algo de intuición. – vefthym

+0

¿Podría explicar su respuesta un poco más por favor? – grattmandu03

+1

cuando la contraseña se enfoca, la tecla del teclado "siguiente" es "ok" y si hace clic en Aceptar, se llamará aEditorAcción() –

Cuestiones relacionadas