Il y a deux EditText
, lors du chargement de la page, un texte est défini dans le premier EditText. Le curseur se place donc à l'emplacement de départ de EditText
. Je souhaite définir le curseur dans le deuxième EditText qui ne contient aucune donnée. Comment faire ça?
Où position est un int:
editText1.setSelection(position)
J'ai fait cette méthode pour définir la position du curseur sur fin du texte après la mise à jour le texte de EditText par programme Ici, etmsg
est EditText
etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);
Le code ci-dessous est Placez le curseur sur Démarrage dans EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(0);
Code ci-dessous est Placez le curseur à la fin de EditText
:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(editText.getText().length());
Le code ci-dessous correspond à la position du curseur après une deuxième position de caractère:
EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);
Je veux définir la position du curseur dans edittext qui ne contient aucune donnée
Il n'y a qu'une seule position dans un EditText vide, c'est setSeletion(0)
.
Ou vouliez-vous dire que vous voulez vous concentrer sur votre EditText
lorsque votre activité commence? Dans ce cas, sa requestFocus()
utilisez la ligne ci-dessous
e2.setSelection(e2.length());
e2
is edit text Nom de l'objet
Laissez editText2 votre deuxième vue EditText. Mettez ensuite le code suivant dans onResume ()
editText2.setFocusableInTouchMode(true);
editText2.requestFocus();
ou mettre
<requestFocus />
dans votre mise en page XML de la deuxième vue EditText.
le curseur de saisie de texte n’a pas sa place à un endroit donné si nous utilisons directement editText.setSelection(position);
..____. Dans ce cas, vous pouvez essayer
editText.post(new Runnable() {
@Override
public void run() {
editText.setSelection(string.length());
}
});
La méthode setSelection(int index)
dans Edittext
devrait vous permettre de le faire.
à titre de rappel: si vous utilisez edittext.setSelection()
pour définir le curseur et que cela ne fonctionne PAS lors de la configuration d'une alertdialog
par exemple, veillez à définir la fonction selection()
APRÈS la création de la boîte de dialogue.
exemple:
AlertDialog dialog = builder.show();
input.setSelection(x,y);
Ce code vous aidera à afficher votre curseur à la dernière position du texte modifié.
editText.requestFocus();
editText.setSelection(editText.length());
N'oubliez pas d'appeler requestFocus()
avant setSelection
pour edittext.
Si vous souhaitez placer le curseur à une certaine position sur un EditText, vous pouvez utiliser:
yourEditText.setSelection(position);
De plus, il est possible de définir la position initiale et finale, de sorte que vous sélectionniez par programme du texte, de cette façon:
yourEditText.setSelection(startPosition, endPosition);
Veuillez noter que le réglage de la sélection peut être délicat car vous pouvez placer le curseur avant ou après un caractère, l'image ci-dessous explique comment indexer fonctionne dans ce cas:
Donc, si vous voulez que le curseur se trouve à la fin du texte, réglez-le simplement sur yourEditText.length()
.
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
Je ne vais pas obtenir la méthode setSelection () directement, donc j'ai fait comme ci-dessous et travailler comme un charme
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);
Si vous souhaitez définir le curseur après le caractère n
à partir de De droite à gauche, procédez comme suit.
edittext.setSelection(edittext.length()-n);
Si le texte d'edittext ressemble à
version<sub></sub>
et vous voulez déplacer le curseur en 6ème position à droite
Ensuite, il déplacera le curseur sur
version<sub> </sub>
^
Vous pouvez utiliser le code suivant pour obtenir la position dans votre EditText qui correspond à une certaine ligne et colonne. Vous pouvez ensuite utiliser editText.setSelection(getIndexFromPos(row, column))
pour définir la position du curseur . Les appels suivants à la méthode peuvent être effectués:
getIndexFromPos(x, y)
Va à la colonne y de la ligne xgetIndexFromPos(x, -1)
Va à la dernière colonne de la ligne xgetIndexFromPos(-1, y)
Va à la colonne y de la dernière lignegetIndexFromPos(-1, -1)
Va à la dernière colonne de la dernière ligneToutes les limites de lignes et de colonnes sont gérées; Entrer une colonne supérieure à la longueur de la ligne retournera la position dans la dernière colonne de la ligne. Entrer une ligne supérieure au nombre de lignes de EditText ira à la dernière ligne. Il devrait être suffisamment fiable car il a été testé de manière intensive.
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;
}
On a déjà répondu à la question mais je pensais que quelqu'un pourrait vouloir le faire à la place.
Cela fonctionne en boucle à travers chaque caractère, en incrémentant le nombre de lignes chaque fois qu'il trouve un séparateur de ligne. Lorsque le nombre de lignes est égal à la ligne souhaitée, il retourne l'index actuel + la colonne ou l'index de fin de ligne si la colonne est hors limites. Vous pouvez également réutiliser la méthode getTrueLineCount()
. Elle renvoie un nombre de lignes en ignorant le retour à la ligne, contrairement à TextView.getLineCount()
.
Si vous voulez définir la position du curseur dans EditText? essayez ces codes ci-dessous
EditText rename;
String title = "title_goes_here";
int counts = (int) title.length();
rename.setSelection(counts);
rename.setText(title);