Estoy cambiando el valor de un EditText
enkeyListener
.
Pero cuando cambio el texto, el cursor se mueve al comienzo de EditText
. Necesito que el cursor esté al final del texto.
Cómo mover el cursor al final del texto en a EditText
.
Estoy cambiando el valor de un EditText
enkeyListener
.
Pero cuando cambio el texto, el cursor se mueve al comienzo de EditText
. Necesito que el cursor esté al final del texto.
Cómo mover el cursor al final del texto en a EditText
.
EditText
s como elementos de aListView
. En cuanto a la experimentación, hice algunos cambios en elListView
código fuente en sí, que es una bestia bastante compleja, y probé en el emulador. Estaba relacionado con la gestión de control de foco realizada por el componente. Por supuesto, no es una solución que pueda dar para ayudar a nuestro amigo. :)OnFocusChanged
devolución de llamada. La solución es poner setSelection dentro de un ejecutable y ejecutarlo en el hilo principal. Consulte aquí stackoverflow.com/a/32156989/4514796Respuestas:
Prueba esto:
fuente
onSelectionChanged()
método de unaEditText
clase:public void onSelectionChanged(int start, int end) { CharSequence text = getText(); if (text != null) { if (start != text.length() || end != text.length()) { setSelection(text.length(), text.length()); return; } } super.onSelectionChanged(start, end); }
Hay una función llamada append para ediitext que agrega el valor de la cadena al valor actual de edittext y coloca el cursor al final del valor. Puede tener el valor de cadena como el valor actual de ediitext y llamar a append ();
fuente
myedittext.append("");
myedittext.append("");
no funcionó para mí!Selection
es la forma correcta de lograr esa OMI.Kotlin :
coloque el cursor en la posición inicial :
coloque el cursor al final del EditText :
El siguiente código es colocar el cursor después del segundo carácter:
JAVA :
coloque el cursor en la posición inicial :
coloque el cursor al final del EditText :
El siguiente código es colocar el cursor después del segundo carácter:
fuente
findViewById(R.id.edittext_id) as EditText
confindViewById<EditText>(R.id.edittext_id)
o simplemente evitar el vaciado si se utilizaAPI 26+
Si llamó
setText
antes y el nuevo texto no obtuvo la fase de diseño, llamesetSelection
a un ejecutable separado disparado porView.post(Runnable)
(reenvío de este tema).Entonces, para mí, este código funciona:
Editar 16/05/2019: En este momento estoy usando la extensión de Kotlin para eso:
y luego - editText.placeCursorToEnd ().
fuente
También puede colocar el cursor al final del texto en la
EditText
vista de esta manera:fuente
fuente
Esta es otra posible solución:
Simplemente pruebe esta solución si no funciona por alguna razón:
fuente
¡Funciona bien para mí!
fuente
En mi caso, creé el siguiente kotlin ext. función, puede ser útil para alguien
Luego use de la siguiente manera
fuente
Si su EditText no está claro:
o
fuente
Deberías poder lograrlo con la ayuda del
EditText's
métodosetSelection()
, mira aquífuente
Creo que esto puede lograr lo que quieres.
fuente
La pregunta es antigua y está respondida, pero creo que puede ser útil tener esta respuesta si desea utilizar las nuevas herramientas DataBinding para Android, solo configúrelo en su XML:
fuente
EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point
Cursorfuente
Si desea seleccionar todo el texto e ingresar texto nuevo en lugar del anterior, puede usar
fuente
Esto funciona
fuente
editText.setSelection
Es la magia aquí. Básicamente, la selección le permite colocar el cursor en cualquier posición que desee.Esto coloca el cursor al final de EditText. Básicamente
editText.getText().length()
te da la longitud del texto. Luego lo usassetSelection
con longitud.editText.setSelection(0);
Es para colocar el cursor en la posición inicial (0).
fuente
Todos los demás códigos que probé no funcionaron bien debido al hecho de que el usuario aún podía colocar el cursor / cursor en cualquier lugar en el medio de la cadena (ej .: 12 | 3.00 - donde | está el cursor). Mi solución siempre coloca el cursor al final de la cadena cada vez que se toca en EditText.
La solución definitiva es:
@ string / amount = "0.00" @ string / zero_value = "0.00"
¡Espero eso ayude!
fuente
Para ViewModel, LiveData y Enlace de datos
Necesitaba esta funcionalidad
EditText
con soporte multilínea en mi aplicación de notas. Quería el cursor al final del texto cuando el usuario navega hacia el fragmento que tiene texto de nota.La solución sugerida por el djleop se acerca. Pero el problema con esto es que, si el usuario coloca el cursor en algún lugar en el medio del texto para editarlo y comienza a escribir, el cursor volvería al final del texto. Esto sucedió porque el
LiveData
emitiría el nuevo valor y el cursor saltaría al final del texto nuevamente, lo que provocaría que el usuario no pudiera editar el texto en algún lugar en el medio.Para resolver esto, lo uso
MediatorLiveData
y le asigno la longitud deString
solo una vez usando una bandera. Esto hará que LiveData lea el valor solo una vez, es decir, cuando el usuario navegue hasta el fragmento. Después de eso, el usuario puede colocar el cursor en cualquier lugar donde desee editar el texto allí.ViewModel
Aquí,
yourObject
hay otro LiveData recuperado de la base de datos que contiene el texto de cadena que está mostrando en elEditText
.Luego vincule esto
MediatorLiveData
a su EditText usando un adaptador de encuadernación.XML
Utiliza el enlace de datos bidireccional para mostrar texto y aceptar la entrada de texto.
Adaptador de enlace
Event
claseLa
Event
clase aquí es como un evento SingleLiveEvent escrito por José Alcérreca de Google. Lo uso aquí para encargarme de la rotación de la pantalla. El uso del sencilloEvent
asegurará que el cursor no salte al final del texto cuando el usuario esté editando el texto en algún lugar en el medio y la pantalla gire. Mantendrá la misma posición cuando la pantalla gire.Aquí está la
Event
clase:Esta es la solución que funciona para mí y proporciona una buena experiencia de usuario. Espero que ayude en sus proyectos también.
fuente
similar a la respuesta de @Anh Duy, pero no funcionó para mí. También necesitaba que el cursor se moviera al final solo cuando el usuario toca el texto de edición y aún así puede seleccionar la posición del cursor después, este es el único código que me ha funcionado
fuente
Esto hace el truco de manera segura :
fuente
fuente
Las respuestas anteriores no funcionaron para mí. Entonces descubrí una nueva solución. Esto puede ser útil para alguien. He estado usando la última versión de Android Studio, es decir, 3.5 según la fecha actual. Tal vez esa podría ser la razón por la cual las respuestas anteriores no mostraron ningún efecto.
CÓDIGO:
Aquí, el primer argumento es el valor de texto Spannable con el que desea jugar, mientras que el segundo argumento es el valor del índice. Como queremos el cursor al final del texto, tomamos getText (). Length () que devuelve la longitud del texto
fuente
Utilice este CustomEditText en su archivo XML, esto funcionará. He probado esto y está funcionando para mí.
fuente
Si desea colocar el cursor al final del texto en la vista Editar texto
fuente