2012-11-27 25 views
14

Potrzebuję ukryć klawiaturę systemu Android po kliknięciu przycisku.Android: Ukryj klawiaturę po kliknięciu przycisku

Widziałem wiele przykładów, jak to zrobić, jednak wszystkie wydają się używać określonego obiektu editText.

np.

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

Mój problem polega na tym, że dynamicznie buduję ekran, dlatego mogą być pola tekstowe edycji grzyw. Czy istnieje sposób, w jaki klawiaturę można ukryć bez konieczności określenia, do którego obiektu editText go ukrywam.

Dzięki

Martin

+0

Można ukryć go dla całej działalności, to podsumowuje to ładnie: http://stackoverflow.com/questions/7789514/how-to-get-activitys-windowtoken-without-view –

Odpowiedz

36

Można zamiast ustawić go do układu, tj:

LinearLayout mainLayout; 

// Get your layout set up, this is just an example 
mainLayout = (LinearLayout)findViewById(R.id.myLinearLayout); 

// Then just use the following: 
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(mainLayout.getWindowToken(), 0); 

To jest przykład zakładając, że układ będzie tworzone niezależnie od tego, ile EditText obiektów (lub inne obiekty) są umieszczone na nim.

Edycja: Ponadto, bardzo przydatne jest upewnienie się, że klawiatura jest ukryta podczas pierwszego uruchomienia aktywności (np. Jeśli pierwsza uwaga skupia się na EditText). Aby to zrobić, umieścić to w onCreate() metody działalności:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
+0

Ty mała gwiazdorko. Działa jak smakołyk. –

+1

dzięki burmat Twój kod bardzo mi pomógł – Simmant

+0

Pamiętaj, że działa również w przypadku innych części widoku, np. a EditText :) Następnie należy zmienić następujący wiersz: 'imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0);' – Michael

20

Nie zapomnij użyć try catch bloga, ponieważ w przypadku, gdy klawiatura nie jest otwarty, a jeśli używasz klucza klucz kod deska ukryć aplikację padnie

try { 
    InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
} catch (Exception e) { 
    // TODO: handle exception 
} 
+0

zdecydowanie najbardziej proste i eleganckie rozwiązanie –

+0

@upvoted .. crash naprawiony ... thx –

6

można ukryć klawiaturę za pomocą następującego kodu, prawdopodobnie na kliknij przycisk Wydarzenie:

//================ Hide Virtual Key Board When Clicking==================// 

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow("Your Button/EditText Object".getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN); 

//======== Hide Virtual Keyboard =====================// 
2

można użyć tego kodu

// Check if no view has focus: 
View view = this.getCurrentFocus(); 
if (view != null) { 
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 
1

Jeśli problem jest na działalność po prostu dodaje zadziała:

try { 
     InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

indziej, jeśli kod jest wymagany we fragmencie wykonaj następujące czynności

try { 
     InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

To zajmie ukrywanie klawiatury po kliknięciu przycisku lub innym zdarzeniu, które zostanie uznane za konkretne, gdy zostanie napisane w bloku zdarzenia.

0
InputMethodManager inputManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(rootView.getWindowToken(), 0); 
0
edittext.onEditorAction(EditorInfo.IME_ACTION_DONE); 
Powiązane problemy