Posiziona il cursore alla fine del text in EditText

Sto cambiando il valore di un EditText sul keyListener .

Ma quando cambio il text il cursore si sposta all'inizio di EditText . Ho bisogno del cursore di essere alla fine del text.

  • Come posso get preferenze condivise in Asynctask?
  • Collezioni in ORMLite
  • Android: Includi eseguibile eseguibile binario in AOSP build
  • Com.google.android.c2dm.intent.REGISTRATION è obsoleto?
  • Come submit ping utilizzando il client Eclipse Paho MQTT?
  • Android L (5.0) non cerca le librerie native nella cartella "armeabi" o "armeabi-v7a" (UnsatisfiedLinkError) in eclipse
  • Come spostare il cursore alla fine del text in un EditText .

  • Imansible risolvere superclass di Landroid / support / v4
  • L'elenco di suggerimenti AutocompleteTextView aumenta
  • Come mostrare un spinner di progresso in android, quando viene eseguito doInBackground ()
  • Android disegnabile con background e gradiente a sinistra
  • Crea un gradiente radiale in modo programmato
  • Come formattare un valore Float con il formato di valuta del dispositivo?
  • 16 Solutions collect form web for “Posiziona il cursore alla fine del text in EditText”

    Prova questo:

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

    Esiste una function chiamata append per ediitext che aggiunge il valore della string al valore attuale edittext e pone il cursore alla fine del valore. È ansible avere il valore della string come valore attuale ediitext e call append ();

     myedittext.append("current_this_edittext_string"); 

    Se hai chiamato setText prima e il nuovo text non ha ottenuto il setSelection chiamata di fase di layout in un setSelection separato sparato da View.post(Runnable) (repost da questo argomento).

    Quindi, per me questo codice funziona:

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

    È anche ansible posizionare il cursore alla fine del text nella visualizzazione EditText come questo:

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

    Questa è un'altra ansible soluzione:

     et.append(""); 

    Provi questa soluzione se non funziona per nessuna ragione:

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

    Sotto il codice è impostare il cursore sulla posizione di partenza:

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

    Sotto il codice è impostare il cursore alla fine di EditText:

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

    Sotto il codice è posizionare il cursore dopo il secondo carattere:

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

    Dovresti essere in grado di raggiungere questo con il metodo setSelection () di EditText, vedi qui

    Penso che questo possa raggiungere quello che vuoi.

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

    Funziona bene per me!

    Se il tuo text EditText non è chiaro:

     editText.setText(""); editText.append("New text"); 

    Tutti gli altri codici che ho testato non hanno funzionato bene a causa del fatto che l'utente potrebbe ancora mettere il cursore / cursore ovunque nel mezzo della string (es .: 12 | 3.00 – where | è il cursore). La mia soluzione mette sempre il cursore alla fine della string each volta che il touch si verifica in EditText.

    La soluzione finale è:

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

    Spero che sia d'aiuto!

    Questo fa il trucco in modo sicuro :

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

    Se si desidera select tutto il text e solo inserire un nuovo text invece di quello vecchio, è ansible utilizzare

      android:selectAllOnFocus="true" 

    simile alla risposta di @ Anh Duy, ma non funzionava per me. ho anche bisogno del cursore di passare alla fine solo quando l'utente tocca il text di modifica e ancora essere in grado di select la posizione del cursore in seguito, questo è l'unico codice che ha funzionato per me

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

    Questo funziona

     Editable etext = edittext.getText(); Selection.setSelection(etext,edittext.getText().toString().length()); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.