Aus meiner Sicht habe ich eine Suche EditText und möchte programmgesteuert das Verhalten eines Klickereignisses auf dem Feld auslösen, dh das Textfeld fokussieren UND bei Bedarf eine weiche Tastatur anzeigen (falls keine harte Tastatur verfügbar ist).
Ich habe es versucht field.requestFocus()
. Das Feld wird tatsächlich scharfgestellt, aber die Softtastatur wird nicht angezeigt.
Ich habe es versucht field.performClick()
. Das ruft aber nur den OnClickListener des Feldes auf.
Irgendeine Idee ?
android
android-edittext
sdabet
quelle
quelle
field.requestFocus()
dieonResume()
Methode der Aktivität (anstelle deronCreate()
) aufgerufen habe. Ich weiß nicht genau, warum es funktioniert ...onResume
weilonResume
es nach aufgerufen wirdonCreate
, alsofield
erst existiert, wennonCreate
es ausgeführt wird. Siehe hier: developer.android.com/reference/android/app/…Hier ist der Code, der für mich funktioniert hat.
edittext.post(new Runnable() { public void run() { edittext.requestFocusFromTouch(); InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); lManager.showSoftInput(edittext, 0); } });
Das ist es! Genießen ;)
quelle
EditText
programmgesteuert hinzu, wenn der Benutzer die Taste drückt.EditText
Modal aus einem Dialog hinzugefügt . Einige Flags werden von Android gesetzt, wodurch dieses Steuerelement keine Berührungen erhält. Wenn Sie das Feld in der ausführbaren Datei hinzufügen, werden die Flags nicht gesetzt.InputType
aus, als würde dasEditText
von Android auf null gesetzt. Wenn Sie das einstellenInputType
, sollte es funktionieren.Der folgende Code hat bei mir funktioniert , nachdem die beiden anderen Antworten bei mir nicht funktioniert haben :
@Override public void onResume() { super.onResume(); SingletonBus.INSTANCE.getBus().register(this); //passwordInput.requestFocus(); <-- that doesn't work passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen }
Wo
ShowKeyboard
istprivate class ShowKeyboard implements Runnable { @Override public void run() { passwordInput.setFocusableInTouchMode(true); // passwordInput.requestFocusFromTouch(); passwordInput.requestFocus(); getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0); } }
Nach einer erfolgreichen Eingabe stelle ich auch sicher, dass ich die Tastatur verstecke
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(getView().getWindowToken(), 0);
Technisch gesehen habe ich gerade 300 ms Verzögerung hinzugefügt, bevor ich die Soft-Tastatur-Anzeigeanforderung ausgeführt habe. Verrückt oder? Auch geändert
requestFocus()
zurequestFocusFromTouch()
.BEARBEITEN: Verwenden Sie
requestFocusFromTouch()
es nicht, um dem Launcher ein Touch-Ereignis zu geben. Bleib beirequestFocus()
.EDIT2: Verwenden Sie in Dialogs (
DialogFragment
) FolgendesgetDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
anstatt
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
quelle
requestFocusFromTouch()
scheint ein Touch-Ereignis auf dem Launcher auszulösen. Das ist komisch.field.post(new Runnable() { @Override public void run() { field.requestFocus(); field.onKeyUp(KeyEvent.KEYCODE_DPAD_CENTER, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER)); } });
quelle
In meinem Fall wollte ich die virtuelle Tastatur ohne Verweis auf ein bestimmtes Textfeld anzeigen, daher habe ich den ersten Teil der akzeptierten Antwort verwendet, um mich zu konzentrieren :
edittext.setFocusableInTouchMode(true); edittext.requestFocus();
Dann zeige ich die virtuelle Tastatur :
InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
quelle