Woher weiß ich, wann die Bearbeitung meines Textes abgeschlossen ist? Zum Beispiel, wenn der Benutzer das nächste Feld auswählt oder die Fertig-Taste auf der Softtastatur drückt.
Ich möchte das wissen, damit ich den Eingang klemmen kann. Es sieht so aus, als ob das afterTextChanged des Textbeobachters nach der Eingabe jedes Zeichens erfolgt. Ich muss einige Berechnungen mit der Eingabe durchführen, daher möchte ich die Berechnung nach der Eingabe jedes Zeichens vermeiden.
Vielen Dank
EditorInfo.IME_ACTION_NEXT
und ausführenIME_ACTION_PREVIOUS
. Ich habe gerade die Antwort bearbeitet, indem ich sie dem CodeEditText
erbt,setOnFocusChangeListener
was eine Implementierung von erfordertOnFocusChangeListener
.Implementieren
onFocusChange
und es gibt einen booleschen Parameter fürhasFocus
. Wenn dies falsch ist, haben Sie den Fokus auf ein anderes Steuerelement verloren.BEARBEITEN
Um beide Fälle zu behandeln - bearbeiten Sie Text, der den Fokus verliert, ODER der Benutzer klickt auf die Schaltfläche "Fertig" - erstellen Sie eine einzelne Methode, die von beiden Listenern aufgerufen wird.
private void calculate() { ... } btnDone.setOnClickListener(new OnClickListener() { public void onClick(View v) { calculate(); } }); txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus) calculate(); } });
quelle
Verwenden einer EditText-Objekt-XML, die wie folgt definiert ist:
<EditText android:id="@+id/create_survey_newquestion_editText_minvalue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:ems="4" android:imeOptions="actionDone" android:inputType="number" />
Wir können seinen Text erfassen i) wenn der Benutzer auf der Softtastatur (OnEditorActionListener) auf die Schaltfläche Fertig klickt oder ii) wenn der EditText den Benutzerfokus (OnFocusChangeListener) verloren hat, der sich jetzt auf einem anderen EditText befindet:
/** * 3. Set the min value EditText listener */ editText= (EditText) this.viewGroup.findViewById(R.id.create_survey_newquestion_editText_minvalue); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { String input; if(actionId == EditorInfo.IME_ACTION_DONE) { input= v.getText().toString(); MyActivity.calculate(input); return true; // consume. } return false; // pass on to other listeners. } }); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { String input; EditText editText; if(!hasFocus) { editText= (EditText) v; input= editText.getText().toString(); MyActivity.calculate(input); } } });
Das funktioniert bei mir. Sie können die Softtastatur nach den Berechnungen mit einem Code wie dem folgenden ausblenden:
private void hideKeyboard(EditText editText) { InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); }
Bearbeiten: Rückgabewerte zu onEditorAction hinzugefügt
quelle
Ich habe diese einfache Sache gemacht, wenn der Fokus von Text bearbeiten verschoben wird, um den Text zu erhalten. Dies funktioniert, wenn der Benutzer den Fokus verschiebt, um andere Ansichten wie eine Schaltfläche oder einen anderen EditText oder eine andere Ansicht auszuwählen.
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { EditText editText = (EditText) v; String text = editText.getText().toString(); } } });
quelle
Um eine höhere Ebene zu erreichen, können Sie die afterTextChanged () -Methode von TextWatcher verwenden.
quelle