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());