Me pregunto si hay una manera de manejar al usuario presionando Entermientras escribe EditText
, algo así como el evento onSubmit HTML.
También me pregunto si hay una manera de manipular el teclado virtual de tal manera que el botón "Listo" esté etiquetado como algo diferente (por ejemplo, "Ir") y realice una determinada acción al hacer clic (de nuevo, como en OnSubmit).
Respuestas:
Si.
También si.
Querrá ver los atributos
android:imeActionId
yandroid:imeOptions
, más elsetOnEditorActionListener()
método, todo activadoTextView
.Para cambiar el texto del botón "Listo" a una cadena personalizada, use:
fuente
fuente
enter
en mi texto de edición, todo el texto de edición se mueve hacia abajo ... ¿Cómo puedo solucionar esto?Esto es lo que haces. También está oculto en el código de muestra del desarrollador de Android 'Bluetooth Chat'. Reemplace las partes en negrita que dicen "ejemplo" con sus propias variables y métodos.
Primero, importe lo que necesita en la Actividad principal donde desea que el botón de retorno haga algo especial:
Ahora, haga una variable de tipo TextView.OnEditorActionListener para su clave de retorno (aquí uso exampleListener );
Luego debe decirle al oyente dos cosas sobre qué hacer cuando se presiona el botón de retorno. Necesita saber de qué EditText estamos hablando (aquí uso exampleView ), y luego necesita saber qué hacer cuando se presiona la tecla Enter (aquí, example_confirm () ). Si este es el último o único EditText en su Actividad, debería hacer lo mismo que el método onClick para su botón Enviar (u OK, Confirmar, Enviar, Guardar, etc.).
Finalmente, configure el oyente (muy probablemente en su método onCreate);
fuente
KeyEvent.ACTION_UP
. Para que esto funcione, es necesario consumir por primera vez elACTION_DOWN
evento:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Luego puede verificar elACTION_UP
evento y realizar la acción (similar a la respuesta anterior). Si no consume elACTION_DOWN
evento,onEditorAction
no se lo solicitaráACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- no podía obtener ninguno de los otros enfoques para trabajarLos teclados de hardware siempre producen eventos de entrada, pero los teclados de software devuelven diferentes ID de acción y nulos en SingleTine EditTexts. Este código responde cada vez que el usuario presiona Intro en un EditText en el que este oyente ha sido configurado, independientemente de EditText o tipo de teclado.
La apariencia predeterminada de la tecla enter en singleLine = false da una flecha doblada para ingresar al teclado. Cuando singleLine = true en el último EditText la clave dice HECHO, y en EditTexts antes dice NEXT. De forma predeterminada, este comportamiento es coherente en todos los emuladores de vainilla, Android y Google. El atributo scrollHorizontal no hace ninguna diferencia. La prueba nula es importante porque la respuesta de los teléfonos a las entradas suaves se deja al fabricante e incluso en los emuladores, los emuladores de nivel 16 de vainilla responden a las entradas suaves largas en líneas múltiples y desplazamiento. el evento.
fuente
Esta página describe exactamente cómo hacer esto.
https://developer.android.com/training/keyboard-input/style.html
Configure android: imeOptions y luego verifique el actionId en onEditorAction. Entonces, si configura imeOptions en 'actionDone', entonces verificará 'actionId == EditorInfo.IME_ACTION_DONE' en onEditorAction. Además, asegúrese de configurar el android: inputType.
Aquí está el EditText del ejemplo vinculado anteriormente:
También puede configurar esto mediante programación utilizando la función setImeOptions (int) . Aquí está el OnEditorActionListener del ejemplo vinculado anteriormente:
fuente
Sé que esto tiene un año, pero acabo de descubrir que funciona perfectamente para EditText.
Impide todo menos texto y espacio. No pude tabular, "volver" ("\ n") ni nada.
fuente
Justo como un apéndice de la respuesta de Chad (que funcionó casi perfectamente para mí), descubrí que necesitaba agregar una verificación en el tipo de acción KeyEvent para evitar que mi código se ejecute dos veces (una vez en la tecla arriba y otra en la tecla abajo evento).
Consulte http://developer.android.com/reference/android/view/KeyEvent.html para obtener información sobre la repetición de eventos de acción (mantener presionada la tecla Intro), etc.
fuente
Tuve un propósito similar. Quería resolver presionando la tecla "Enter" en el teclado (que quería personalizar) en un AutoCompleteTextView que extiende TextView. Intenté diferentes soluciones de arriba y parecían funcionar. PERO experimenté algunos problemas cuando cambié el tipo de entrada en mi dispositivo (Nexus 4 con AOKP ROM) de SwiftKey 3 (donde funcionó perfectamente) al teclado estándar de Android (donde en lugar de manejar mi código desde el oyente, una nueva línea era ingresó después de presionar la tecla "Enter". Me tomó un tiempo manejar este problema, pero no sé si funcionará en todas las circunstancias, sin importar el tipo de entrada que use.
Así que aquí está mi solución:
Establezca el atributo de tipo de entrada de TextView en el xml a "texto":
Personalice la etiqueta de la tecla "Enter" en el teclado:
Establezca un OnEditorActionListener en TextView:
Espero que esto pueda ayudar a otros a evitar los problemas que tuve, porque casi me volvieron loco.
fuente
En su xml, agregue el atributo imeOptions al editText
Luego, en su código Java, agregue OnEditorActionListener al mismo EditText
Aquí está la explicación: imeOptions = actionDone asignará "actionDone" a EnterKey. La tecla EnterKey en el teclado cambiará de "Enter" a "Done". Entonces, cuando se presiona la tecla Intro, se activará esta acción y, por lo tanto, la manejará.
fuente
También puedes hacerlo ...
fuente
enter
en mi texto de edición, todo el texto de edición se mueve hacia abajo ... ¿Cómo puedo solucionar esto?Funciona muy bien para mí
Además, oculta el teclado
fuente
Primero, debe configurar EditText escuchar la tecla presionada
Segundo, defina el evento al presionar la tecla, por ejemplo, evento para establecer el texto de TextView:
Y finalmente, no olvide importar EditText, TextView, OnKeyListener, KeyEvent en la parte superior:
fuente
trabajando perfectamente
}
trabajando perfectamente
fuente
Xml
fuente
Esto debería funcionar
fuente
Escriba este código en su editor para que pueda importar los módulos necesarios.
fuente
Esto funciona bien en teléfonos LG Android. Impide que
ENTER
otros caracteres especiales se interpreten como caracteres normales.Next
ElDone
botón o aparece automáticamente yENTER
funciona como se esperaba.fuente
Aquí hay una función estática simple que puede incluir en su clase
Utils
oKeyboards
que ejecutará el código cuando el usuario presione la tecla de retorno en un teclado de hardware o software. Es una versión modificada de la excelente respuesta de @ earlcasperfuente
InputType en el campo de texto debe estar
text
en orden para que funcione CommonsWare. Solo intenté todo esto, no inputType antes de la prueba y nada funcionó, Enter siguió registrándose como soft enter. DespuésinputType = text
, todo, incluido el setImeLabel funcionó.Ejemplo:
android:inputType="text"
fuente
fuente
Una forma confiable de responder a un <enter> en un EditText es con un TextWatcher , un LocalBroadcastManager y un BroadcastReceiver . Debe agregar la biblioteca de soporte v4 para usar LocalBroadcastManager. Uso el tutorial en vogella.com : 7.3 "Eventos de transmisión local con LocalBroadcastManager" debido a su completo código conciso Ejemplo. En onTextChanged before se encuentra el índice del final del cambio antes del cambio >; menos inicio. Cuando en TextWatcher, el subproceso de la interfaz de usuario está ocupado actualizando editText editable, por lo que enviamos una intención para activar BroadcastReceiver cuando el subproceso de la interfaz de usuario termina de actualizar editText.
fuente
android:inputType="textCapSentences"
. Ej. ), Los retornos de carro se filtran de la entrada, por lo que onTextChanged () no se llama cuando el usuario presiona la tecla Intro.Esta pregunta aún no ha sido respondida con Butterknife
DISEÑO XML
APP JAVA
fuente
Usando Kotlin, he creado una función que maneja todo tipo de acciones "hechas" para EditText, incluido el teclado, y es posible modificarlo y también manejar otras teclas como desee:
Entonces, muestra de uso:
En cuanto a cambiar la etiqueta, creo que depende de la aplicación del teclado, y que generalmente cambia solo en horizontal, como está escrito aquí . De todos modos, ejemplo de uso para esto:
O, si quieres en XML:
Y el resultado (mostrado en paisaje):
fuente
Agregue estos de forma independiente, y debería funcionar:
fuente
Esto le dará una función invocable cuando el usuario presione la tecla de retorno.
Uso
fuente