wake-up-neo.com

Setzen Sie den Cursor an das Ende des Textes in EditText

Ich ändere den Wert einer EditText auf keyListener.

Wenn ich jedoch den Text ändere, bewegt sich der Cursor an den Anfang der EditText.

So bewegen Sie den Cursor in einer EditText an das Ende des Textes.

751
Manu

Versuche dies:

EditText et = (EditText)findViewById(R.id.inbox);
et.setSelection(et.getText().length());
1183
Marqs

Es gibt eine Funktion namens append für ediitext, die den String-Wert an den aktuellen Edittext-Wert anfügt und den Cursor an das Ende des Werts setzt. Sie können den String-Wert als aktuellen Ediitext-Wert selbst festlegen und append () aufrufen.

myedittext.append("current_this_edittext_string"); 
201
James

Kotlin :

setzen Sie den Cursor auf die Startposition :

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

setzen Sie den Cursor auf das Ende von EditText :

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

Unter dem Code wird der Cursor nach dem zweiten Zeichen platziert:

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

Java :

setzen Sie den Cursor auf die Startposition :

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

setzen Sie den Cursor auf das Ende von EditText :

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

Unter dem Code wird der Cursor nach dem zweiten Zeichen platziert:

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

Wenn Sie zuvor setText aufgerufen haben und der neue Text die Layoutphase nicht aufgerufen hat, rufen Sie setSelection in einer separaten ausführbaren Instanz auf, die von View.post(Runnable) ausgelöst wird (erneute Veröffentlichung von this topic).

Also für mich funktioniert dieser Code:

editText.setText("text");
editText.post(new Runnable() {
         @Override
         public void run() {
             registerPhone.setSelection("text".length());
         }
});
63

Sie können den Cursor auch wie folgt in der EditText-Ansicht am Ende des Textes platzieren:

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
40
toobsco42
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});
26
Mario

Dies ist eine weitere mögliche Lösung: 

et.append("");

Probieren Sie diese Lösung einfach aus, wenn sie aus irgendeinem Grund nicht funktioniert:

et.setSelection(et.getText().length());
19
Kreshnik

In meinem Fall habe ich folgendes Kotlin ext erstellt. Funktion kann für jemanden nützlich sein

 private fun EditText.focus(){
        requestFocus()
        setSelection(length())
    }

Dann wie folgt verwenden

mEditText.focus()
11
Igor Siqueira

Sie sollten dies mit der Methode setSelection () der EditText-Methode erreichen können, siehe hier .

11
Maximus

ich denke, das kann erreichen, was Sie wollen.

 Editable etext = mSubjectTextEditor.getText();
 Selection.setSelection(etext, etext.length());
9
Li Che
/**
 * 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);

Es funktioniert gut für mich!

9
Anh Duy

Wenn Ihr EditText nicht klar ist:

editText.setText("");
editText.append("New text");
7
Leo Droidcoder

Die Frage ist alt und beantwortet, aber ich denke, es kann nützlich sein, diese Antwort zu haben, wenn Sie die neu veröffentlichten DataBinding-Tools für Android verwenden möchten. Setzen Sie dies einfach in Ihr XML: 

<data>
    <variable name="stringValue" type="String"/>
</data>
...
<EditText
        ...
        Android:text="@={stringValue}"
        Android:selection="@{stringValue.length()}"
        ...
/>
6
djleop

 enter image description here

Hallo, versuche es 

 <EditText
       Android:id="@+id/edt_text"
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:text="Hello World!"
       Android:cursorVisible="true"/>

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

5
Rahul Patil

editText.setSelection Ist hier die Magie. Grundsätzlich können Sie den Cursor an einer beliebigen Position platzieren.

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

Dies platziert den Cursor an das Ende von EditText. Grundsätzlich gibt editText.getText().length() die Textlänge an. Dann verwenden Sie setSelection mit der Länge.

editText.setSelection(0);

Hiermit setzen Sie den Cursor auf die Startposition (0).

4
Khemraj

Alle anderen Codes, die ich getestet habe, funktionierten nicht gut, da der Benutzer die Einfügemarke/Cursor an beliebiger Stelle in der Mitte der Zeichenfolge platzieren konnte (Beispiel: 12 | 3.00 - wobei | der Cursor ist). Meine Lösung setzt den Cursor immer am Ende der Zeichenfolge, wenn der EditText berührt wird.

Die ultimative Lösung ist:

// 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) {

            }
        });

Ich hoffe es hilft!

3
Daniel Almeida

Das funktioniert

Editable etext = edittext.getText();
Selection.setSelection(etext,edittext.getText().toString().length());
3
Hardik Vasani

Wenn Sie den gesamten Text auswählen und nur neuen statt alten Text eingeben möchten, können Sie verwenden

    Android:selectAllOnFocus="true"
3
ar-g

Das macht den Trick sicher

    editText.setText("");
    if (!TextUtils.isEmpty(text)) {
        editText.append(text);
    }
2

Ähnlich wie @Anh Duys Antwort, aber es funktionierte nicht für mich. Ich brauchte auch den Cursor, um nur ans Ende zu gelangen, wenn der Benutzer auf den Bearbeitungstext tippt und anschließend noch die Position des Cursors auswählen kann. Dies ist der einzige Code, der für mich funktioniert hat

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;
    }
});
1
Fonix
etSSID.setSelection(etSSID.getText().length());
0
siby varghese

Wenn Sie den Cursor in der EditText-Ansicht am Ende des Texts platzieren möchten

 EditText rename;
 String title = "title_goes_here";
 int counts = (int) title.length();
 rename.setSelection(counts);
 rename.setText(title);
0
Mujahid khan