Как скрыть клавиатуру автоматически после отправки электронной почты с помощью emailIntent

Существует страница, на которой пользователь может отправлять электронную почту, sms или звонить своим гостям, когда это необходимо. Проблема в том, что когда пользователь отправляет электронную почту своему гостю, клавиатура не скрывает. Даже несмотря на то, что у меня есть небольшая проблема, решая эту проблему, по-прежнему трудно найти аналогичную должность для ее решения. Я также буду делать скриншоты и размещать их здесь.

Введите описание изображения здесьВведите описание изображения здесьВведите описание изображения здесьВведите описание изображения здесь

Как вы можете видеть, клавиатура не скрывается после отправки почты.

Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.setType("text/plain"); sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { **EmailAddress** }); startActivityForResult(sendIntent, 1); @Override protected void onActivityResult(int arg0, int arg1, Intent arg2) { super.onActivityResult(arg0, arg1, arg2); new Handler().postDelayed(new Runnable() { @Override public void run() { InputMethodManager inputManager = (InputMethodManager) activity .getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(**AnyViewOfScreen**.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } }, 300); } 

Его нельзя переопределить, когда клавиатура показывает и скрывает себя, но вот два метода, которые я использую, чтобы скрыть и показать клавиатуру по мере необходимости.

  public void hideKeyboard(final View aView){ aView.post(new Runnable() { @Override public void run(){ InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } } public void showKeyboard(final View aView) { aView.post(new Runnable() { @Override public void run() { InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.toggleSoftInputFromWindow(ListingScreen.this.getCurrentFocus().getWindowToken(), InputMethodManager.SHOW_FORCED, 0); } }); } 

Когда вы вызываете hide / show Keyboard, переходите к текущему виду. Поток, запускаемый при запуске, будет ждать до тех пор, пока представление не закончит загрузку, а затем отпустите клавиатуру.

Легко добавить в свой манифест следующий код для активности желания:

 android:windowSoftInputMode="stateAlwaysHidden" android:configChanges="keyboardHidden" 

Надеюсь, это поможет кому-то:

 @Override protected void onResume() { super.onResume(); Log.d("OnResume", "Called"); new Handler().postDelayed(new Runnable() { @Override public void run() { InputMethodManager inputManager = (InputMethodManager) LocationDetailActivity.this .getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } }, 300); } 

Если у вас нет фокусного вида в макете, просто добавьте фиктивный линейный макет к вашему xml

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true"> <requestFocus /> </LinearLayout> 

Вызовите этот метод в том месте, где вы хотите скрыть свою клавиатуру, если она открыта (например, вызовите это при нажатии кнопки отправкиEmail)

 protected void showVirturalKeyboard() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { InputMethodManager m = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); if(m != null) { m.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); } } }, 100); } 

После попытки каждого решения, которое я нашел в StackOverflow, ничего не работало. В конце концов, я нашел способ принудительно закрыть клавиатуру, но это не идеально.

Вы можете установить android: windowSoftInputMode = "adjustPan" в манифесте Android для этой активности.

Оскорбительный побочный эффект этого объясняется здесь: http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft :

«Главное окно деятельности не изменено, чтобы освободить место для мягкой клавиатуры. Скорее, содержимое окна автоматически подкрашивается, так что текущий фокус никогда не скрывается клавиатурой, и пользователи всегда могут видеть, что они печатают. Менее желательно, чем изменение размера, поскольку пользователю может понадобиться закрыть мягкую клавиатуру, чтобы получить доступ к скрытым частям окна и взаимодействовать с ними ».

У меня была схожая проблема. Gmail скрывает клавиатуру после отправки. Когда вы возвращаетесь в свое приложение, он фокусируется на чем-то другом. Если вы возьмете более медленное устройство, вы увидите, что gmail скрывает клавиатуру после отправки сообщения.