2013-03-12 44 views
5

Mam aplikację na Androida, która udostępnia listę sklepów spożywczych za pośrednictwem poczty e-mail. Mam problem z tym, że po wysłaniu listy przez klienta poczty e-mail (może to być klient giełdowy lub klient Gmaila), klawiatura się nie zamknie.Klawiatura nie zamyka się po powrocie z klienta poczty elektronicznej

Próbowałem:

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

i wiele innych sposobów. Jeśli sprawdzę, czy klawiatura jest otwarta, zwróci ona false, ponieważ nie jest to aplikacja, która nazywa się klawiatura, ale klient poczty e-mail.

znalazłem obejście tym:

android:windowSoftInputMode="stateAlwaysHidden" 

następnie aplikacja wymusi zamknięcie klawiatury, ale nadal pozostaje w tyle za każdym razem, gdy ponownie otworzyć klawiaturę.

W przypadku telefonu Samsung problem występuje tylko wtedy, gdy korzystam z klienta Gmail.

Odpowiedz

2

Znaleziono rozwiązanie. Po kilku milisekundach fokus został zmieniony spoza aplikacji (klient poczty e-mail) do widoku editText. Wtedy mogę zamknąć klawiaturę. Moje rozwiązanie wygląda następująco:

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

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

Nie ma wyraźniejszego sposobu, aby dokładnie wiedzieć, kiedy, jak przypuszczam. Nawet przez sondowanie, prawda? Próbowałem wsadzić nos w metody obsługi metod wprowadzania danych i pola struktur danych, ale nie udało mi się znaleźć niczego związanego z bieżącym fokusowaniem. – Meymann

0

użycie android:windowSoftInputMode="stateHidden" w activiy tagiem manifest

+0

Już mam. – lagos

+0

Wspomniałeś, że użyłeś stanuAlwaysHidden ... zamiast tego użyj stanu stateHidden. to działa dla mnie w podobnych przypadkach. – stinepike

+0

Przykro mi, moja wina, wspominam o stateAlwaysHidden, ponieważ tak jak obejście zamykania klawiatury po powrocie z zamiarem. – lagos

0

Czy można umieścić ten kod w onResume() metody?

+0

Używam 'startActivityForResult()' dla ognia intencji, więc mam kod wewnątrz 'onActivityResult'. Ale spróbuję umieścić go na onResume() metoda, jest wart strzał. – lagos

+0

Próbowałem umieścić na onResume(), ale problem polega na tym, że aplikacja nie rozpoznaje, że klawiatura jest otwarta, ponieważ aplikacja nie zadzwoniła, aby otworzyć klawiaturę. Tak więc klawiatura nie jest skupiona na editTxt i dlatego nie mogę jej zamknąć. Próbowałem również 'InputMethodManager im = (InputMethodManager) this.getApplicationContext(). GetSystemService (Context.INPUT_METHOD_SERVICE); \t \t im.hideSoftInputFromWindow (getCurrentFocus(). GetWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); ' – lagos

+0

Możesz zrobić lewę z booleanami ... Postaraj się umieścić w tym działaniu wartość boolean. Kiedy przychodzisz z innej aktywności swojej aplikacji, użyj metody onCreate() tej wartości logicznej PRAWDA ... Gdy przychodzisz z klienta poczty e-mail, nie wysyłaj tej wartości boolowskiej (lub = FALSE) i warunek ukrywania klawiatury jest kiedy ta wartość logiczna = FALSE – StephaneT

Powiązane problemy