Андроид спрятал keybord при нажатии enter (в EditText)

Когда мой пользователь нажимает Enter на виртуальном андроиде «пользователь проверяет запись!» Keybord мой keybord останется видимым! (Зачем?)

Вот мой код Java …

private void initTextField() { entryUser = (EditText) findViewById(R.id.studentEntrySalary); entryUser.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: userValidateEntry(); return true; } } return true; } }); } private void userValidateEntry() { System.out.println("user validate entry!"); } 

… здесь мой взгляд

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <EditText android:id="@+id/studentEntrySalary" android:text="Foo" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

Может быть, что-то не так на моем виртуальном устройстве?

Удалена мертвая ссылка ImageShack

Solutions Collecting From Web of "Андроид спрятал keybord при нажатии enter (в EditText)"

Это должно сделать это:

 yourEditTextHere.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); // NOTE: In the author's example, he uses an identifier // called searchBar. If setting this code on your EditText // then use v.getWindowToken() as a reference to your // EditText is passed into this callback as a TextView in.hideSoftInputFromWindow(searchBar .getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); userValidateEntry(); // Must return true here to consume event return true; } return false; } }); 

Сохраните singleLine = "true" и добавьте imeOptions = "actionDone" в EditText. Затем в OnEditorActionListener проверьте, действительно ли actionId == EditorInfo.IME_ACTION_DONE (но измените его на вашу реализацию):

 if (actionId == EditorInfo.IME_ACTION_DONE) { if ((username.getText().toString().length() > 0) && (password.getText().toString().length() > 0)) { // Perform action on key press InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(username.getWindowToken(), 0); doLogin(); } } 

Если вы сделаете текстовое поле одной строкой (я считаю, что свойство называется SingleLine в XML-файлах макета), он выйдет из клавиатуры при вводе.

Здесь вы найдете: http://developer.android.com/reference/android/R.styleable.html#TextView_singleLine

Я создаю пользовательский компонент, который расширяет AutoCompleteTextView, как в приведенном ниже примере:

 public class PortugueseCompleteTextView extends AutoCompleteTextView { ... @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_BACK)) { InputMethodManager inputManager = (InputMethodManager) getContext(). getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow( this.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } return super.onKeyPreIme(keyCode, event); } 

Я использую этот код в AlertDialog.Builder, но его можно использовать для Activity.