Come impostare la posizione del cursore in EditText?

Ci sono due EditText , mentre caricando la pagina un text è impostato nel primo EditText, quindi il cursore ora sarà nel punto di partenza di EditText , voglio impostare la posizione del cursore nel secondo EditText che non contiene dati. Come fare questo?

  • Android come risolvere l'orientamento della camera
  • Come get il numero di telefono del telefono in codice android?
  • Come riavviare il servizio utilizzando IntentService in android
  • Android e get una vista con id cast come una string
  • C'è un modo semplice per aggiungere un bordo alla parte superiore e inferiore di una visualizzazione Android?
  • ActionBarActivity - exception NoClassDefFoundError
  • Errore di networking di Android SpeechReceachzer
  • Android: Finirà () Sempre call onDestroy ()?
  • Cercando di emettere il mio LogCat in un file
  • schermata android-nero sul display video utilizzando VideoView
  • Ottenere i dettagli del certificato da un apk
  • Come accedere alla cartella dati e dati nel dispositivo Android?
  • 15 Solutions collect form web for “Come impostare la posizione del cursore in EditText?”

    Dove la posizione è un int:

     editText1.setSelection(position) 

    Ho fatto così per impostare la posizione del cursore alla fine del text dopo aver aggiornato il text di EditText in modo programmato qui, etmsg è EditText

     etmsg.setText("Updated Text From another Activity"); int position = etmsg.length(); Editable etext = etmsg.getText(); Selection.setSelection(etext, position); 

    Come impostare la posizione del cursore di EditText in Android

    Sotto il codice è impostare il cursore su Inizio di EditText :

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

    Al di sotto del codice è impostato il cursore dopo una certa posizione del 2 ° carattere:

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

    Voglio impostare la posizione del cursore in edittext che non contiene dati

    C'è solo una posizione in un text vuoto EditText, è setSeletion(0) .

    Oppure hai intenzione di voler mettere a fuoco il tuo text EditText quando si apre la tua attività? In questo caso la sua richiestaFocus requestFocus()

    Lascia che editText2 sia la tua seconda vista EditText. Quindi inserisci il seguente codice in onResume ()

     editText2.setFocusableInTouchMode(true); editText2.requestFocus(); 

    o mettere

     <requestFocus /> 

    nel tuo layout xml della seconda vista EditText.

    il metodo setSelection (int index) in Edittext dovrebbe consentirti di farlo.

    come promemory: se si utilizza edittext.setSelection() per impostare il cursore e NON funziona durante l'impostazione di un alertdialog di alertdialog ad esempio, assicurarsi di impostare la selection() DOPO la window di dialogo è stata creata

    esempio:

     AlertDialog dialog = builder.show(); input.setSelection(x,y); 

    utilizzare la row sottostante

     e2.setSelection(e2.length()); 

    e2 è il nome dell'object di modifica di text

    Non riceverò direttamente il metodo setSelection (), così ho fatto come sotto e functionrò come il fascino

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

    Se si desidera impostare il cursore dopo n caratteri da destra a sinistra, allora è necessario fare questo.

     edittext.setSelection(edittext.length()-n); 

    Se il text di edittext piace

     version<sub></sub> 

    e si desidera spostare il cursore alla 6ª posizione da destra

    Poi sposterà il cursore in-

      version<sub> </sub> ^ 

    un po 'di tempo per modificare il cursore di text il donot viene in una posizione particolare se si usa direttamente editText.setSelection(position); . In questo caso puoi provare

     editText.post(new Runnable() { @Override public void run() { editText.setSelection(string.length()); } }); 

    Ricorda la richiesta requestFocus() prima di setSelection per edittext.

    Impostare il cursore su una row e una colonna

    È ansible utilizzare il seguente codice per get la posizione nel tuo EditText corrispondente a una certa row e colonna. È quindi ansible utilizzare editText.setSelection(getIndexFromPos(row, column)) per impostare la posizione del cursore. È ansible effettuare le seguenti chiamate al metodo:

    • getIndexFromPos(x, y) Vai alla colonna y della row x
    • getIndexFromPos(x, -1) Vai all'ultima colonna della row x
    • getIndexFromPos(-1, y) Vai alla colonna y dell'ultima row
    • getIndexFromPos(-1, -1) Vai all'ultima colonna dell'ultima row

    Tutti i limiti della linea e della colonna vengono gestiti; L'inserimento di una colonna superiore alla lunghezza della row restituirà la posizione all'ultima colonna della row. L'immissione di una row superiore alla linea di row di EditText passa all'ultima row. Dovrebbe essere abbastanza affidabile poiché è stato pesantemente testato.

     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 domanda è stata già risolta, ma ho pensato che qualcuno avrebbe potuto farlo.

    Funziona per loop attraverso each carattere, incrementando il count delle linee each volta che trova un separatore di linea. Quando il count della linea corrisponde alla linea desiderata, restituisce l'indice corrente + la colonna o l'indice di fine linea se la colonna è fuori limite. È inoltre ansible riutilizzare il metodo getTrueLineCount() , restituisce un count di linee che ignora il wrapping di text, a differenza di TextView.getLineCount() .

    In kotlin, è ansible creare una function di estensione come questa:

     fun EditText.placeCursorAtLast() { val string = this.text.toString() this.setSelection(string.length) } 

    e quindi call semplicemente myEditText.placeCursorAtLast()

    Credo che il modo più semplice per farlo è solo l'imbottitura d'uso.

    Dite nella sezione edittext della tua xml, aggiungi android: paddingLeft = "100dp" Questo sposterà la posizione iniziale del cursore 100dp a destra dall'estremità sinistra.

    Allo stesso modo, puoi utilizzare android: paddingRight = "100dp" Questo sposterà la posizione finale del cursore 100dp sinistro dall'estremità destra.

    Per ulteriori dettagli, controlla questo articolo sul mio blog : Android: Impostazione della Posizione di Avvio e Fine di Cursore in Widget EditText

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.