web-dev-qa-db-fra.com

Comment définir la position du curseur dans EditText?

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?

205
nila

Où position est un int:

editText1.setSelection(position)
423
NotACleverMan

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);
92
MKJParekh

Comment définir la position du curseur EditText dans Android

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);
30
IntelliJ Amiya

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

14
Reno

utilisez la ligne ci-dessous

e2.setSelection(e2.length());

e2 is edit text Nom de l'objet

11
Syed Danish Haider

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.

9
monish george

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());
                }
            });
6
dev.sourabh

La méthode setSelection(int index) dans Edittext devrait vous permettre de le faire.

5
Avinash

à 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);
4
calav3ra

Ce code vous aidera à afficher votre curseur à la dernière position du texte modifié.

 editText.requestFocus();
 editText.setSelection(editText.length());
3
Kailas Bhakade

N'oubliez pas d'appeler requestFocus() avant setSelection pour edittext.

2
Dong Thang

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:

 enter image description here

Donc, si vous voulez que le curseur se trouve à la fin du texte, réglez-le simplement sur yourEditText.length().

1
Junior Damacena
EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());
1
Satendra Behre

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);
1
sujith s

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>
                ^
1
Abu Mohammad Rasel

Définir le curseur sur une ligne et une colonne

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 x
  • getIndexFromPos(x, -1) Va à la dernière colonne de la ligne x
  • getIndexFromPos(-1, y) Va à la colonne y de la dernière ligne
  • getIndexFromPos(-1, -1) Va à la dernière colonne de la dernière ligne

Toutes 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().

0
Nicolas

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);
0
Mujahid khan