2013-06-20 22 views
9

Mam EditText wewnątrz fragmentu, który jest sam w sobie w zakładce actionbarsherlock. Kiedy dotknę wewnątrz pola EditText, pojawi się klawiatura miękka z jednym z klawiszy posiadających ikonę lupy (wyszukiwania). Kiedy wpisuję tekst i klikam klawisz wyszukiwania, mogę przetworzyć napisany ciąg w mojej funkcji onEditorAction, ale miękka klawiatura pozostaje na wyświetlaczu. Jak mogę go zamknąć programowo?Jak zamknąć miękką klawiaturę w fragmencie

Przy okazji, jeśli jedną odpowiedzią jest to, że mógłbym skonfigurować niektóre ustawienia dla EditText tak, aby zamykały się automatycznie podczas wyszukiwania, nadal chciałbym wiedzieć, czy można zamknąć klawiaturę programową, ponieważ mam również własne przycisk wyszukiwania na ekranie (nie ma nic wspólnego z klawiaturą programowalną) i chciałbym, aby miękka klawiatura również się zamykała, gdy jest wciśnięty.

Uwaga: Zanim ktokolwiek spieszy się, by twierdzić, że to pytanie jest powtórzeniem poprzedniego pytania, widziałem wiele Q & A dotyczących ukrywania miękkiej klawiatury w różnych punktach. Wiele odpowiedzi wydaje się niezmiernie skomplikowane, aw wielu nie jest jasne, czy chodzi o to, aby trwale ukryć klawiaturę, czy po prostu tymczasowo ją zamknąć, dopóki użytkownik nie dotknie ponownie pola EditText. Również niektóre odpowiedzi wymagają wywołań metod niedostępnych w fragmentach.

+0

Zabawne jest to, że podczas wyszukiwania innych postów ręczne ukrywanie klawiatury w Androidzie jest bardzo problematyczne z WTF-why-my-device-is-not-applied. Polecam ci ulgę w przypadku niezamierzonej sytuacji. Lub zmień UX aplikacji. :( – Youngjae

Odpowiedz

37

W moich fragmentów zamknąć klawiaturę po prostu w ten sposób:

public static void closeKeyboard(Context c, IBinder windowToken) { 
    InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(windowToken, 0); 
} 

closeKeyboard(getActivity(), yourEditText.getWindowToken()); 
2

Używam tego kodu we fragmencie

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
          Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(text.getWindowToken(), 0); 

po kliknięciu na ikonę paska działanie i to działa, nie widzę dlaczego nie powinien działać w Twoim przypadku (może ja źle pytanie).

7

To działa kod do ukrywania miękkiej klawiatury dla Androida.

try { 
      InputMethodManager input = (InputMethodManager) activity 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
0

Można sprawdzić moją odpowiedź here. To był jedyny sposób, który działał dla mnie wewnątrz fragmentu.

-1

Praca w Fragment

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
0

przejrzysty sposób, aby zamknąć klawiaturę i clearfocus danego EditText wewnątrz fragmentu, jest upewnienie się, że EditText XML posiada:

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

Następnie ustaw słuchacza do EditText (z Kotlinem i fragmentem):

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     }) 
Powiązane problemy