2011-10-05 14 views
6

Il mio codice è:Inserire carattere tra la posizione del cursore nel testo di modifica

EditText edt 

    edt.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void afterTextChanged(Editable arg0) { 

      final String number = edt.getText().toString(); 

      int count = arg0.length(); 
      edt.setSelection(count); 

     } 

        } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 

      final String number = edt.getText().toString(); 

        } 

ho una tastiera troppo .. Quando si fa clic su un particolare numero nel tastierino, ho bisogno di aggiungere che il numero alla corrente cursore postion .... anche .. quando si preme eliminare anche, ho bisogno di eliminare il numero della posizione del cursore corrente ... Pls aiutare

Dialpad Immagine

enter image description here

risposta

23

provare il seguente codice di

int start =editText.getSelectionStart(); //this is to get the the cursor position 
String s = "Some string"; 
editText.getText().insert(start, s); //this will get the text and insert the String s into the current position 

Ecco il codice per eliminare il testo selezionato da EditText

int start = t1.getSelectionStart(); //getting cursor starting position 
int end = t1.getSelectionEnd();  //getting cursor ending position 
String selectedStr = t1.getText().toString().substring(start, end); //getting the selected Text 
t1.setText(t1.getText().toString().replace(selectedStr, "")); //replacing the selected text with empty String and setting it to EditText 
+0

@Aju In realtà la parte di cancellazione è un hack che non funzionerà Mi piace sempre, se hai un testo come: "Ciao Ciao Ciao" e vuoi eliminare solo il mezzo "Ciao", non funzionerà. –

1

È necessario implementare OnClickListener per i pulsanti. Al suo interno è necessario aggiornare il testo dell'editor. Ad esempio, per '5' pulsante:

public void onClick(View v) { 

    String currentText = edt.getText(); 
    edt.setText(currentText + "5"); 
} 
+0

Come aggiorno il testo dell'editor. – jennifer

+0

C'è 'getText()' e 'setText()' nella classe 'EditText' – Caner

+0

Si usa' edt.append ("5") 'per quello. –

0
editText.getText().insert(editText.getSelectionStart(), text); 

testo essere il vostro reale stringa che stai cercando di inserire.

1

Per inserire:

String dialled_nos = dialpad_text.getText().toString(); 
    String number = view.getTag().toString(); // 1,2....9,0 
    int start = dialpad_text.getSelectionStart(); 
    dialled_nos = new StringBuilder(dialled_nos).insert(start, number).toString(); 
    dialpad_text.setText(dialled_nos); 
    dialpad_text.setSelection(start+1); // cursor will move to new position 

Per rimuovere:

String dialled_nos = dialpad_text.getText().toString(); 
    int remove_index_position = dialpad_text.getSelectionStart()-1; 
    StringBuilder dialled_nos_builder = new StringBuilder(dialled_nos); 
    if(remove_index_position>=0) { 
     dialled_nos_builder.deleteCharAt(remove_index_position); 
     dialpad_text.setText(dialled_nos_builder.toString()); 
     dialpad_text.setSelection(remove_index_position); 
    } 
+0

Grazie. Il tuo metodo di rimozione mi ha aiutato! –

1
etPnr.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      etPnr.removeTextChangedListener(this); 

      // TODO: If you want to do on the text, apply here 

      if (start + count > etPnr.length()) 
       etPnr.setSelection(etPnr.length()); 
      else 
       etPnr.setSelection(start + count); 

      etPnr.addTextChangedListener(this); 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 

si può provare

0

Attualmente uso questa soluzione:

public static void insertText(String text, EditText editText) 
{ 
    int start = Math.max(editText.getSelectionStart(), 0); 
    int end = Math.max(editText.getSelectionEnd(), 0); 

    editText.getText().replace(Math.min(start, end), Math.max(start, end), text, 0, text.length()); 
    try 
    { 
     editText.setSelection(start + 1); 
    } 
    catch (final IndexOutOfBoundsException e) 
    { 

    } 
} 
Problemi correlati