2013-03-12 1 views
5

У меня есть приложение для Android, которое делится списком продуктов по электронной почте. У меня возникли проблемы, когда после отправки списка почтовым клиентом (может быть клиент обмена или клиент Gmail) клавиатура не будет закрыта.Клавиатура не закрывается после возвращения с почтового клиента

Я пробовал:

InputMethodManager mgr = (InputMethodManager) getSystemService(
     Context.INPUT_METHOD_SERVICE); 
mgr.hideSoftInputFromWindow(editTxt.getWindowToken(), 0); 

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

Я нашел обходной путь, в том числе:

android:windowSoftInputMode="stateAlwaysHidden" 

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

С телефоном Samsung проблема возникает только в том случае, если я использую клиент Gmail.

ответ

2

Найдено решение. После нескольких миллисекунд фокус изменился извне приложения (Email-клиент) в представление editText. Затем я могу закрыть клавиатуру. Итак, мое решение выглядит так:

Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 

      @Override 
      public void run() { 
       closeKeyboard(); 
      } 
     }, 20); 
+0

Нет более четкого способа точно знать, когда, я полагаю. Даже опросом, не так ли? Пытался вставлять нос в поля методов метода ввода и поля структур данных, но не смог найти ничего, что связано с текущим фокусом. – Meymann

0

использование android:windowSoftInputMode="stateHidden" в activiy теге манифеста

+0

У меня уже есть. – lagos

+0

u упомянул, что u использовал stateAlwaysHidden ... вместо этого использования stateHidden. он работает для меня в аналогичных случаях. – stinepike

+0

Извините, что я виноват, я упоминаю stateAlwaysHidden, потому что как обходной способ закрытия клавиатуры при возврате из намерения. – lagos

0

ли вы поместить этот код в() метод onResume?

+0

Я использую 'startActivityForResult()' для запуска намерения, поэтому у меня есть код внутри 'onActivityResult'. Но я постараюсь включить его в метод onResume(), стоит сделать снимок. – lagos

+0

Я попытался включить его onResume(), но проблема в том, что приложение не распознает, что клавиатура открыта, так как приложение не вызывало открытую клавиатуру. Поэтому клавиатура не сфокусирована на editTxt, и поэтому я не могу ее закрыть. Я также попробовал 'InputMethodManager im = (InputMethodManager) this.getApplicationContext(). GetSystemService (Context.INPUT_METHOD_SERVICE); \t \t im.hideSoftInputFromWindow (getCurrentFocus(). GetWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); ' – lagos

+0

Вы можете сделать трюк с булевыми ... Попробуйте ввести логическое в этом упражнении. Когда вы приходите из другого действия вашего приложения, добавьте метод onCreate() в этот логический TRUE ... Когда вы пришли из почтового клиента, не создавайте этот логический (или = FALSE), а условие, чтобы скрыть клавиатуру, когда этот boolean = FALSE – StephaneT

Смежные вопросы