¿Cómo atrapo eventos clave específicos desde el teclado virtual? específicamente, estoy interesado en la tecla "Hecho".Cómo capturar una tecla "Listo" presiona desde el teclado virtual
Respuesta
Nota: Esta respuesta es vieja y ya no funciona. Vea las respuestas a continuación.
Captura KeyEvent y luego verifica su código clave. FLAG_EDITOR_ACTION se utiliza para identificar la tecla de entrada que vienen de un IME cuya tecla enter se ha auto-etiquetado "siguiente" o "hecho"
if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
//your code here
Encuentra los documentos here.
No estoy muy seguro de qué tipo de oyente se utilizó en la respuesta aceptada. Utilicé el OnKeyListener
conectado a un EditText
y no fue capaz de detectarlo ni tampoco lo hizo.
Sin embargo, usando OnEditorActionListener
funcionó y también me permitió diferenciarlos comparando el valor de acción con las constantes definidas EditorInfo.IME_ACTION_NEXT
y EditorInfo.IME_ACTION_DONE
.
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((actionId & EditorInfo.IME_MASK_ACTION) != 0) {
doSomething();
return true;
}
else {
return false;
}
}
});
Para JellyBean y superior OnEditorActionListener es necesario para este caso de uso en lugar de OnKeyListener. De los documentos: Como los métodos de entrada suaves pueden usar formas múltiples e ingeniosas de ingresar texto, no hay garantía de que presionar una tecla en un teclado virtual genere un evento clave: esto queda a la discreción del IME, y de hecho ** enviar tales eventos se desaconseja **. Nunca debe confiar en recibir KeyEvents para ninguna tecla en un método de entrada suave. Referencia: http://developer.android.com/reference/android/view/KeyEvent.html –
Gracias por su increíble consejo .. Está funcionando ahora –
La respuesta de @JasonAxelson fue la mejor –
etSearchFriends = (EditText) findViewById(R.id.etSearchConn);
etSearchFriends.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(ACTIVITY_NAME.this, etSearchFriends.getText(),Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
¿cómo puedo encontrar el código clave para cada tecla presionada desde el teclado? –
@BhavanaVadodariya no puedes. Al menos no en Jelly Bean. Ver: http://developer.android.com/reference/android/view/KeyEvent.html –
@ respuesta de Swato no se completó para mí (y no compila!) Así que estoy mostrando cómo hacer la comparación con las acciones realizadas y el próximo.
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
int result = actionId & EditorInfo.IME_MASK_ACTION;
switch(result) {
case EditorInfo.IME_ACTION_DONE:
// done stuff
break;
case EditorInfo.IME_ACTION_NEXT:
// next stuff
break;
}
}
});
También quiero señalar que para JellyBean y superior OnEditorActionListener se necesita escuchar para 'entrar' o 'siguiente' y no se puede utilizar OnKeyListener. A partir de los documentos:
métodos de entrada Como blandos pueden utilizar múltiples e inventivas formas de introducir texto, no hay ninguna garantía de que cualquier pulsación de tecla en un teclado de software generará un evento clave: esto se deja a la discreción del IME, y de hecho el envío de tales eventos se desaconseja. Nunca confíe en recibir KeyEvents para ninguna tecla en un método de entrada suave.
Referencia: http://developer.android.com/reference/android/view/KeyEvent.html
tengo EditarTexto que busca nombres, y se nota automáticamente los resultados a continuación en ListView. El teclado SoftInput solo mostró el botón "siguiente" e ingresó el signo, que no hizo nada. Solo quería el botón Hecho (no siguiente o ingresar signo) y también lo quería cuando lo presioné, debería cerrar el teclado porque el usuario debería ver los resultados debajo de él.
solución que encontré/por el Sr. Cyril Mottier en su blog/era muy simple y funcionó sin ningún código adicional: en XML donde se encuentra EditarTexto, esto debe ser escrito: android: imeOptions = "actionDone"
teclado para esconderse con el botón Hecho, EditarTexto debería tener este aspecto:
<EditText
android:id="@+id/editText1central"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/imageView1"
android:layout_toLeftOf="@+id/imageView2tie"
android:ems="10"
android:imeOptions="actionDone"
android:hint="@string/trazi"
android:inputType="textPersonName" />
para coger una pulsación de tecla “Hecho” de método onKeyUp el teclado en pantalla de anulación de la actividad. Configurar un detector OnKeyListener para una vista no funcionará porque las pulsaciones de teclas en los métodos de entrada de software generalmente no activarán los métodos de este oyente, esta devolución de llamada se invoca cuando se presiona una tecla de hardware en la vista.
// Called when a key was released and not handled by any of the views inside of the activity.
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
// code here
break;
default:
return super.onKeyUp(keyCode, event);
}
return true;
}
Nota: tipo de entrada mención en su texto de edición.
<EditText android:id="@+id/select_category"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" >
edittext.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((actionId & EditorInfo.IME_MASK_ACTION) == EditorInfo.IME_ACTION_DONE) {
//do something here.
return true;
}
return false;
}
});
Eso sí, como esto:
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE)
{
//Do Something
}
return false;
}
});
IME_MASK_ACTION es de 255, mientras que el ActionID recibido es 6, y mi compilador no acepta
if (actionId & EditorInfo.IME_MASK_ACTION)
que es un int. ¿Cuál es el uso de & -ing 255 de todos modos? Así que la prueba puede ser simplemente
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE)
...
puede anular hecho acontecimiento clave de este método:
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// do your stuff here
}
return false;
}
});
editText = (EditText) findViewById(R.id.edit_text);
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// code here
}
return false;
}
});
- 1. android: acción del teclado de pantalla cuando se presiona la tecla Listo
- 2. Cómo capturar cualquier tecla en X?
- 3. Mantener el teclado suave abierto cuando se presiona la tecla enter
- 4. Tecla de captura presionada con el teclado virtual en Android?
- 5. Cómo detectar si se presiona alguna tecla
- 6. ¿Cómo puedo capturar los eventos del teclado desde qué teclas?
- 7. onKeyListener no funciona en el teclado virtual
- 8. cómo capturar el evento clave desde una vista?
- 9. Cómo capturar la tecla borrar presionar C#?
- 10. Reproducir un sonido cuando se presiona una tecla
- 11. cómo detectar cuando una tecla de acceso directo (tecla de acceso directo) se presiona
- 12. UITextField Cómo comprobar si se presiona una tecla de borrar
- 13. jQuery: cómo capturar la tecla presionando live()
- 14. Cómo capturar la tecla Entrar, presione GtkEntry
- 15. Tecla Listo en la aplicación iPhone que cierra el teclado (con UITextView)
- 16. Botón para mostrar el teclado virtual?
- 17. Flex 4 detectar si el usuario presiona la tecla enter
- 18. Capturar una tecla 'Escape' en los navegadores WebKit
- 19. Cómo capturar el evento hide keyboard en iOS usando JavaScript
- 20. ¿Cómo oculto el teclado virtual cuando cambio las pestañas?
- 21. ¿Cómo perder el foco de un texto de edición cuando se presiona el botón "acabado" en el teclado virtual?
- 22. Sondear el teclado (detectar una pulsación de tecla) en python
- 23. Cerrar el teclado virtual en el botón presione
- 24. Teclado suave sin un EditText y la tecla de detección presiona
- 25. ¿Cómo puedo saber si se presiona el cambio usando RawInput?
- 26. ¿Puedo usar el teclado virtual sin EditText?
- 27. Evitar que se descarte el teclado suave
- 28. Extienda el teclado virtual de Android
- 29. teclado del iPhone, botón Listo y resignFirstResponder
- 30. Jquery deshabilitar una tecla del teclado
Gracias! ¡eso resolvió mi pregunta! – oriharel
Bien, me alegro de poder ayudar. :) –
Desafortunadamente, esta respuesta carece de contexto :( – Sam