validar style studio propiedades obtener example eventos edittext datos android android-edittext

android - style - ¿Cómo establecer la posición del cursor en EditText?



propiedades edittext android (18)

No obtendré el método setSelection () directamente, así que lo hice como a continuación y trabajo como charm

EditText editText = (EditText)findViewById(R.id.edittext_id); editText.setText("Updated New Text"); int position = editText.getText().length(); Editable editObj= editText.getText(); Selection.setSelection(editObj, position);

Hay dos EditText , mientras se carga la página, se establece un texto en el primer EditText, por lo que ahora el cursor estará en el lugar de EditText de EditText . Quiero establecer la posición del cursor en el segundo EditText que no contiene datos. ¿Como hacer esto?


Quiero establecer la posición del cursor en el texto de edición que no contiene datos

Solo hay una posición en un EditText vacío, es setSeletion(0) .

¿O quiso decir que desea centrarse en su EditText cuando se abre su actividad? En ese caso su requestFocus()


Coloca el cursor en una fila y columna

Puede usar el siguiente código para obtener la posición en su EditText que corresponde a una determinada fila y columna. Luego puede usar editText.setSelection(getIndexFromPos(row, column)) para establecer la posición del cursor. Se pueden hacer las siguientes llamadas al método:

  • getIndexFromPos(x, y) Vaya a la columna y de la línea x
  • getIndexFromPos(x, -1) Ir a la última columna de la línea x
  • getIndexFromPos(-1, y) Vaya a la columna y de la última línea
  • getIndexFromPos(-1, -1) Ir a la última columna de la última línea

Se manejan todos los límites de línea y columna; Si ingresa una columna mayor que la longitud de la línea, se devolverá la posición en la última columna de la línea. Si ingresa una línea mayor que el recuento de líneas de EditText irá a la última línea. Debe ser lo suficientemente confiable como fue probado en gran medida.

static final String LINE_SEPARATOR = System.getProperty("line.separator"); int getIndexFromPos(int line, int column) { int lineCount = getTrueLineCount(); if (line < 0) line = getLayout().getLineForOffset(getSelectionStart()); // No line, take current line if (line >= lineCount) line = lineCount - 1; // Line out of bounds, take last line String content = getText().toString() + LINE_SEPARATOR; int currentLine = 0; for (int i = 0; i < content.length(); i++) { if (currentLine == line) { int lineLength = content.substring(i, content.length()).indexOf(LINE_SEPARATOR); if (column < 0 || column > lineLength) return i + lineLength; // No column or column out of bounds, take last column else return i + column; } if (String.valueOf(content.charAt(i)).equals(LINE_SEPARATOR)) currentLine++; } return -1; // Should not happen } // Fast alternative to StringUtils.countMatches(getText().toString(), LINE_SEPARATOR) + 1 public int getTrueLineCount() { int count; String text = getText().toString(); StringReader sr = new StringReader(text); LineNumberReader lnr = new LineNumberReader(sr); try { lnr.skip(Long.MAX_VALUE); count = lnr.getLineNumber() + 1; } catch (IOException e) { count = 0; // Should not happen } sr.close(); return count; }

La pregunta ya estaba respondida pero pensé que alguien podría querer hacer eso en su lugar.

Funciona en bucle a través de cada carácter, incrementando el recuento de líneas cada vez que encuentra un separador de línea. Cuando el recuento de líneas es igual a la línea deseada, devuelve el índice actual + la columna, o el índice de final de línea si la columna está fuera de los límites. También puede reutilizar el método getTrueLineCount() , devuelve un recuento de líneas ignorando el TextView.getLineCount() texto, a diferencia de TextView.getLineCount() .


Cómo establecer la posición del cursor de edición de texto en Android

Debajo del código se encuentra el cursor para comenzar en EditText :

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

Debajo del código se encuentra el cursor al final del texto de EditText :

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

Debajo del código está el cursor de ajuste después de una posición de 2 ° carácter

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


Creo que la forma más sencilla de hacer esto es simplemente usar relleno.

Diga en la sección de texto editado de su xml, agregue android: paddingLeft = "100dp" Esto moverá su posición de inicio del cursor 100dp a la derecha desde el extremo izquierdo.

De la misma forma, puede usar android: paddingRight = "100dp" Esto moverá su posición final del cursor 100dp a la izquierda desde el extremo derecho.

Para obtener más detalles, consulte este artículo en mi blog : Android: configuración de la posición de inicio y finalización del cursor en el widget de texto de edición


Deje que editText2 sea su segunda vista EditText. Luego ponga el siguiente fragmento de código en onResume ()

editText2.setFocusableInTouchMode(true); editText2.requestFocus();

o poner

<requestFocus />

en su diseño xml de la segunda vista EditText.


Donde la posición es un int:

editText1.setSelection(position)


En algún momento, el cursor de texto de edición no viene en una posición particular si utilizamos directamente editText.setSelection(position); . En ese caso puedes intentarlo.

editText.post(new Runnable() { @Override public void run() { editText.setSelection(string.length()); } });


En archivo xml android: paddingLeft:

<EditText android:id="@+id/txt_amount" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="10dp"/>

Espero que esto te ayude


En kotlin, podrías crear una función de extensión como esta:

fun EditText.placeCursorAtLast() { val string = this.text.toString() this.setSelection(string.length) }

y luego simplemente llame a myEditText.placeCursorAtLast()


Este código le ayudará a mostrar su cursor en la última posición de edición de texto.

editText.requestFocus(); editText.setSelection(editText.length());


He hecho esto para establecer la posición del cursor al final del texto después de actualizar el texto de EditText mediante programación aquí, etmsg es EditText

etmsg.setText("Updated Text From another Activity"); int position = etmsg.length(); Editable etext = etmsg.getText(); Selection.setSelection(etext, position);


Recuerde llamar a requestFocus() antes de setSelection para edittext.


Si desea configurar el cursor después de n caracteres de derecha a izquierda, entonces tiene que hacer esto.

edittext.setSelection(edittext.length()-n);

Si el texto de edittext le gusta

version<sub></sub>

y quieres mover el cursor en la 6ª posición desde la derecha

Luego moverá el cursor a

version<sub> </sub> ^


como recordatorio: si está usando edittext.setSelection() para configurar el cursor, y NO funciona al configurar un alertdialog de alertdialog por ejemplo, asegúrese de configurar la selection() DESPUÉS de que se haya creado el diálogo

ejemplo:

AlertDialog dialog = builder.show(); input.setSelection(x,y);


usa la línea de abajo

e2.setSelection(e2.length());

e2 es editar texto Nombre del objeto


setSelection(int index) en Edittext debería permitirle hacer esto.


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