Coloque el cursor al final del texto en EditText

Estoy cambiando el valor de un EditText en keyListener .

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 EditText .

Prueba esto:

 EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length()); 

Hay una función llamada append para ediitext que agrega el valor de cadena al valor de edittext actual y coloca el cursor al final del valor. Puede tener el valor de cadena como el valor actual de ediitext y llamar a append ();

 myedittext.append("current_this_edittext_string"); 

Kotlin :

coloca el cursor en la posición inicial :

 val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(0) 

coloca el cursor al final de EditText :

 val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(editText.getText().length()) 

Debajo del código es colocar el cursor después del segundo caracter:

 val editText = findViewById(R.id.edittext_id) as EditText editText.setSelection(2) 

JAVA :

coloca el cursor en la posición inicial :

  EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(0); 

coloca el cursor al final de EditText :

 EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(editText.getText().length()); 

Debajo del código es colocar el cursor después del segundo caracter:

 EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(2); 

Si llamó a setText antes y el texto nuevo no obtuvo la fase de diseño, llame a setSelection en un ejecutable independiente View.post(Runnable) por View.post(Runnable) ( View.post(Runnable) desde este tema).

Entonces, para mí este código funciona:

 editText.setText("text"); editText.post(new Runnable() { @Override public void run() { registerPhone.setSelection("text".length()); } }); 

También podría colocar el cursor al final del texto en la vista EditText esta manera:

 EditText et = (EditText)findViewById(R.id.textview); int textLength = et.getText().length(); et.setSelection(textLength, textLength); 
 editText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { editText.setSelection(editText.getText().length()); return false; } }); 

Esta es otra posible solución:

 et.append(""); 

Simplemente pruebe esta solución si no funciona por alguna razón:

 et.setSelection(et.getText().length()); 

Deberías poder lograr eso con el método de EditText setSelection (), mira aquí

Creo que esto puede lograr lo que quieres.

  Editable etext = mSubjectTextEditor.getText(); Selection.setSelection(etext, etext.length()); 
 /** * Set cursor to end of text in edittext when user clicks Next on Keyboard. */ View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (b) { ((EditText) view).setSelection(((EditText) view).getText().length()); } } }; mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); mEditLastName.setOnFocusChangeListener(onFocusChangeListener); 

¡Funciona bien para mí!

Si su EditText no está claro:

 editText.setText(""); editText.append("New text"); 

Todos los demás códigos que probé no funcionaron bien porque el usuario aún podía colocar el cursor de intercalación / cursor en cualquier punto de la cadena (por ejemplo: 12 | 3.00, donde | es el cursor). Mi solución siempre coloca el cursor al final de la cadena cada vez que se toca en EditText.

La mejor solución es:

 // For a EditText like:  

@ string / amount = “0.00” @ string / zero_value = “0.00”

 // Create a Static boolean flag private static boolean returnNext; // Set caret/cursor to the end on focus change EditTextAmount.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View editText, boolean hasFocus) { if(hasFocus){ ((EditText) editText).setSelection(((EditText) editText).getText().length()); } } }); // Create a touch listener and put caret to the end (no matter where the user touched in the middle of the string) EditTextAmount.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View editText, MotionEvent event) { ((EditText) editText).onTouchEvent(event); ((EditText) editText).setSelection(((EditText) editText).getText().length()); return true; } }); // Implement a Currency Mask with addTextChangedListener EditTextAmount.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String input = s.toString(); String output = new String(); String buffer = new String(); String decimals = new String(); String numbers = Integer.toString(Integer.parseInt(input.replaceAll("[^0-9]", ""))); if(returnNext){ returnNext = false; return; } returnNext = true; if (numbers.equals("0")){ output += "0.00"; } else if (numbers.length() <= 2){ output += "0." + String.format("%02d", Integer.parseInt(numbers)); } else if(numbers.length() >= 3){ decimals = numbers.substring(numbers.length() - 2); int commaCounter = 0; for(int i=numbers.length()-3; i>=0; i--){ if(commaCounter == 3){ buffer += ","; commaCounter = 0; } buffer += numbers.charAt(i); commaCounter++; } output = new StringBuilder(buffer).reverse().toString() + "." + decimals; } EditTextAmount.setText(output); EditTextAmount.setSelection(EditTextAmount.getText().length()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { /*String input = s.toString(); if(input.equals("0.0")){ EditTextAmount.setText("0.00"); EditTextAmount.setSelection(EditTextAmount.getText().length()); return; }*/ } @Override public void afterTextChanged(Editable s) { } }); 

¡Espero eso ayude!

Esto funciona

 Editable etext = edittext.getText(); Selection.setSelection(etext,edittext.getText().toString().length()); 

La pregunta es vieja y respondida, pero creo que puede ser útil tener esta respuesta si quieres usar las recientemente lanzadas herramientas de enlace de datos para Android, simplemente configura esto en tu XML:

    ...  

Esto hace el truco de manera segura :

  editText.setText(""); if (!TextUtils.isEmpty(text)) { editText.append(text); } 

Si desea seleccionar todo el texto y simplemente ingresar texto nuevo en lugar del anterior, puede usar

  android:selectAllOnFocus="true" 

similar a la respuesta de @Anh Duy, pero no funcionó para mí. también necesitaba que el cursor se moviera hacia el final solo cuando el usuario tocaba el texto de edición y aún así podía seleccionar la posición del cursor después, este es el único código que me ha funcionado

 boolean textFocus = false; //define somewhere globally in the class //in onFinishInflate() or somewhere editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { editText.onTouchEvent(event); if(!textFocus) { editText.setSelection(editText.getText().length()); textFocus = true; } return true; } }); editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { textFocus = false; } }); 

editText.setSelection es la magia aquí. Básicamente, la selección le da lugar al cursor en cualquier posición que desee.

 EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); 

Esto coloca el cursor al final de EditText. Básicamente editText.getText().length() le da longitud de texto. Luego usa setSelection con longitud.

editText.setSelection(0);

Es para poner el cursor en la posición inicial (0).

enter image description here

Hola, prueba esto

   

EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point EditText editText = findViewById(R.id.editText); editText.setSelection(editText.getText().length()); // End point Cursor

 public class CustomEditText extends EditText { public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); } public CustomEditText(Context context) { super(context); } public CustomEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); this.setSelection(this.getText().length()); } @Override protected void onSelectionChanged(int selStart, int selEnd) { } } 

Utiliza este CustomEditText en tu archivo XML, esto funcionará. Lo he probado y funciona para mí.