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 principio del EditText
. Necesito que el cursor esté al final del texto.
- Problema con el EditText de Android: KeyListener
- Android onkey - dispatchKeyEvent sin disparar
- Escucha la tecla ENTER en Android
- Tecla de captura pulsada con el teclado virtual en Android?
- Android onKeyListener en EditText sólo responde a la tecla "Enter" cuando se pulsa dos veces
Cómo mover el cursor al final del texto en un EditText
.
- Android: KeyListener para un EditText que no recibe claves
- Editar el oyente de clave de texto
- Android - Quiere restringir algunos charaters al edittext
- Cómo manejar la tecla Intro usando TextWatcher en Android
- EditText OnKeyListener no funciona
Prueba esto:
EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length());
Existe una función llamada append para ediitext que añade el valor de la cadena al valor edittext actual y coloca el cursor al final del valor. Puede tener el valor de cadena como el propio valor de ediitext actual y llamar append ();
myedittext.append("current_this_edittext_string");
Si usted llamó a setText
antes y el nuevo texto no obtuvo la llamada de fase de diseño setSelection
en un setSelection
separado disparado por View.post(Runnable)
(repost de este tema).
Así, 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
la EditText
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("");
Pruebe esta solución si no funciona por ninguna razón:
et.setSelection(et.getText().length());
Usted debe ser capaz de lograr que con el método de EditText setSelection (), ver 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í!
Debajo del código se debe colocar el cursor en la posición inicial:
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(0);
Debajo del código es para poner el cursor al final de la EditText:
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(editText.getText().length());
Debajo del código se coloca el cursor después del segundo carácter:
EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setSelection(2);
Si su EditText no está claro:
editText.setText(""); editText.append("New text");
Todos los otros códigos que he probado no funcionaron bien debido a que el usuario todavía podría colocar el cursor / cursor en cualquier parte del medio de la cadena (por ejemplo: 12 | 3.00 – donde | es el cursor). Mi solución siempre pone el cursor en el final de la cadena siempre que el toque se produce en el EditText.
La solución definitiva es:
// For a EditText like: <EditText android:id="@+id/EditTextAmount" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="@string/amount" android:layout_weight="1" android:text="@string/zero_value" android:inputType="text|numberDecimal" android:maxLength="13"/>
@ 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 hace el truco con seguridad :
editText.setText(""); if (!TextUtils.isEmpty(text)) { editText.append(text); }
Si desea seleccionar todo el texto y simplemente ingresar un nuevo texto en lugar del antiguo, puede utilizar
android:selectAllOnFocus="true"
Similar a la respuesta de @Anh Duy, pero no funcionó para mí. También necesitaba el cursor para mover al final sólo cuando el usuario toque el texto de edición y todavía ser capaz de seleccionar la posición del cursor después, este es el único código que ha funcionado para mí
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; } });
Esto funciona
Editable etext = edittext.getText(); Selection.setSelection(etext,edittext.getText().toString().length());