2012-09-28 23 views
5

Ich habe eine kurze Frage.Löschen letzte Zeichen von edittext

Ich habe einen Bildschirm mit einigen Zahlen, wenn Sie auf eine der Zahlen klicken, wird die Nummer an das Ende des Editiertext angefügt.

Ich habe auch eine Schaltfläche zurück, wenn der Benutzer auf diese Schaltfläche klickt Ich möchte das letzte Zeichen entfernen.

Im Moment habe ich die folgenden:

Editable currentText = input.getText(); 

if (currentText.length() > 0) { 
    currentText.delete(currentText.length() - 1, 
      currentText.length()); 
    input.setText(currentText); 
} 

Gibt es einen einfacheren Weg, dies zu tun? Etwas in der Zeile von input.remove()?

+1

i eine keyEvent mit der Entf-Taste injizieren würde innerhalb – njzk2

Antwort

10

Ich weiß, das eine alte Frage, aber es ist nach wie vor gültig. Wenn Sie den Text selbst zuschneiden, wird der Cursor beim Setzen von Text() auf den Anfang zurückgesetzt. Also anstatt (wie durch njzk2 erwähnt), senden Sie eine gefälschte Schlüsselereignis löschen und lassen Sie die Plattform handhaben es für Sie ...

//get a reference to both your backButton and editText field 

EditText editText = (EditText) layout.findViewById(R.id.text); 
ImageButton backButton = (ImageButton) layout.findViewById(R.id.back_button); 

//then get a BaseInputConnection associated with the editText field 

BaseInputConnection textFieldInputConnection = new BaseInputConnection(editText, true); 

//then in the onClick listener for the backButton, send the fake delete key 

backButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     textFieldInputConnection.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); 
    } 
}); 
+2

Guter Ansatz, und es funktioniert! Eine Sache, die beachtet werden sollte, simuliert der Code * nur * drücken "Löschen" -Taste. Damit das Löschen funktioniert, muss der 'EditText' den Fokus haben. Sie können überprüfen, ob Sie 'editText.isFocused()' verwenden und 'editText.requestFocus()' verwenden, um es zu fokussieren. Es wird auch den Cursor an das Ende setzen, damit das letzte Zeichen gelöscht wird. –

8

versuchen, dies aus,

String str = yourEditText.getText().toString().trim(); 


    if(str.length()!=0){ 
    str = str.substring(0, str.length() - 1); 

    yourEditText.setText (str); 
} 
+3

Dies nicht einfacher ist und nicht Überprüfen Sie die Grenzen. – njzk2

+0

Das setzt den Cursor an den Anfang des Bearbeitungstextes, der nicht ideal ist –

Verwandte Themen