¿Es posible tener un EditText
widget con android:inputType="textMultiLine"
set, yandroid:imeOptions="actionDone"
al mismo tiempo?
Me gustaría un cuadro de edición de varias líneas, con el botón de acción en el teclado para estar Listo, no Enter (Retorno de carro), pero no parece estar funcionando.
Gracias por adelantado
Respuestas:
Utilizar
y en XML:
fuente
textField.setCursorVisible(false);
dentro de unonEditorActionListener
De la documentación de Android: ' "textMultiLine" Teclado de texto normal que permite a los usuarios ingresar largas cadenas de texto que incluyen saltos de línea (retornos de carro) .Por lo tanto, el atributo textMultiLine no es apropiado si desea tener el botón 'Listo' en el teclado.
Una forma sencilla de obtener un campo de entrada de varias líneas (en este caso 3 líneas) con el botón hecho es usar EditText con
Sin embargo, por alguna razón, esto solo funciona para mí si hago estas configuraciones en el código en lugar del archivo de diseño (en onCreate) por
Espero que esto ayude a alguien, ya que tomó bastante tiempo averiguarlo. Si encuentra una manera de hacerlo funcionar desde el manifiesto, háganoslo saber.
fuente
maxLines()
lugar desetLines()
si desea evitar cambiar la altura delEditText
setMaxLines(3)
) ¡Muchas gracias!¡Ejemplo de trabajo! Cree la clase EditText personalizada a continuación que admita esta función y use la clase en el archivo xml. Código de trabajo:
fuente
Para hacer esto en Kotlin (y también opcionalmente aplicar otras configuraciones como
textCapSentences
puedes usar esta función de extensión:Uso:
fuente
setRawInputType
lugar desetInputType
Creo que esta es la forma de hacer las cosas. Tener
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
hace que la funcionalidad de la tecla Enter sea ambigua. Solo tenga en cuenta que puede usarandroid:lines="10"
y tal vez eliminarandroid:inputType="textMultiLine"
, pero depende de lo que quiera lograr, a veces solo necesitaandroid:inputType="textMultiLine"
y no hay reemplazo para él.fuente
Esto parece funcionarme perfectamente
fuente
Solución Kotlin reutilizable
Establecer estos valores en el código fue lo único que funcionó para mí
Necesito esto con frecuencia, así que hice esto para mantener el código limpio:
Si desea agregar una acción personalizada opcional en 'Listo', intente esto:
Luego agrega
hideKeyboard()
llamarEditText.multilineDone
fuente
Respuesta corta: No, creo que no es posible antes del nivel de API 11 (3.0).
El mismo problema surgió aquí (discutido en los comentarios a la respuesta aceptada):
Botón de acción del teclado suave de Android
Del comentario final:
fuente
Una forma sencilla de solucionar esta situación:
mantenga estos atributos en EditText:
luego agregue este código para ocultar el teclado solo cuando se presiona ENTER:
fuente
Si no se trata del aspecto del teclado en pantalla, simplemente puede poner un oyente de entrada en el teclado y activar el estado "hecho" si el usuario ingresa una nueva línea.
fuente
si usa la opción de entrada textImeMultiline con imeoptions flagnext y actionnext, obtendrá un botón siguiente en lugar del retorno de cariage
fuente
Si bien ninguna de las otras soluciones funcionó para mí, lo siguiente funcionó perfección y me ahorró días y días de más búsquedas en Google, con algunos giros propios, por supuesto. Desafortunadamente, no recuerdo de dónde obtuve el código exactamente y, por lo tanto, no puedo darle al autor el crédito que se merece.
En su código Java:
fuente
Estoy en 4.xy intenté llamar a setHorizontallyScrolling () (con o sin setLine () o setMaxLines ()), así como muchas configuraciones XML diferentes para que se muestre el botón Listo. Ninguno de ellos funcionó. La conclusión es que si tu EditText es de varias líneas, Android siempre querrá mostrar el retorno de carro en lugar del botón "Listo", a menos que pongas algún truco alrededor de esto.
La solución de menor complicación que encontré que no implica reasignar el comportamiento del retorno de carro está aquí: https://stackoverflow.com/a/12570003/3268329 . Esta solución anulará el implacable deseo de Android de forzar la configuración del indicador IME_FLAG_NO_ENTER_ACTION para vistas de varias líneas, lo que hace que el botón Listo desaparezca.
fuente
Yo también luché durante bastante tiempo, ¡pero finalmente encontré una solución!
Simplemente cree una clase EditText personalizada como tal:
Esta clase elimina lineBreaks (\ n), envuelve el texto como lo haría textMultiline, Y le permite reemplazar el botón Enter por un ImeAction;).
Solo necesita llamarlo en su XML en lugar de la clásica clase EditText.
Para explicar la lógica aquí:
fuente
La solución de trabajo está aquí, cree su EditTextView personalizado (solo extienda una vista de texto) y anule onInputConnection con un fragmento de código que encontrará en la respuesta aceptada aquí: Multiline EditText con Done SoftInput Action Label en 2.3
fuente