2012-07-24 13 views
29

Chcę ukryć klawiaturę po zwolnieniu AlertDialog, ale nadal jest widoczna. Tu jest mój kodu:Ukryj klawiaturę po zamknięciu okna dialogowego

alert = new AlertDialog.Builder(MyActivity.this); 
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 

alert.setOnDismissListener(new DialogInterface.OnDismissListener() { 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
}); 

Odpowiedz

7
+0

Obie metody mają zastosowanie widok EditText, ale nie mam go. Nie mam EditText. To jest okno dialogowe w mojej Ustawieniach. Kiedy jest zamknięta klawiatura pokazuje :( –

+1

jeśli twoja klawiatura wyskakuje w oknie dialogowym, oznacza to, że twoje okno dialogowe musi zawierać EditText, więc możesz napisać powyższy kod, przekazując okno-znacznik EditText, a następnie wywołać dialog.dismiss() – AndroidGuy

+0

lub jeśli nie jest to powyższy przypadek .. oznacza, że ​​jeśli Edittext nie jest w twoim oknie dialogowym, musisz sprawdzić, dla którego EditText go wyskakuje i ukryć przed wyświetleniem okna dialogowego.Jeśli to też nie zadziała, plz opublikuj swój kod – AndroidGuy

3

użyć tej metody:

IBinder token = searchTextEntry.getWindowToken(); 
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(token, 0); 

Gdzie searchTextEntry jest nazwą mojego numeru referencyjnego EditText.

+0

Nie mam EditText. To okno dialogowe w UstawieniachAktywność. Kiedy jest zamknięta klawiatura pokazuje :( –

14

Spotkałem ten sam problem. Rozwiązał to, robiąc w ten sposób. Nie potrzebuje żadnego odniesienia:

imm.hideSoftInputFromWindow(getWindow().getDecorView() 
       .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
+2

+1 za dobrą odpowiedź. – BBdev

+0

To działa poprawnie, gdy próbuje się ukryć przed DialogFragmentem – Kammaar

+0

Ale pozostawia tymczasowo biały cień, jak zapobiec białemu cieniowi? –

61

W Oczywisty xml

android: windowSoftInputMode = "stateAlwaysHidden"

To automatycznie ukryć klawiaturę na oddalenie od Dialog

+2

Łatwy i skuteczny ... Dzięki !!! –

+2

To powinna być zaakceptowana odpowiedź! Zła praktyka zastępowania właściwości zadeklarowanych w AndroidManifest.xml – Renjith

+0

@Renjith, czy możesz wyjaśnić, dlaczego jego zły – Rajeshwar

0

Wszystkie te porady, aby korzystać InputMethodManager są nieco niejasne - gdzie dokładnie nazwać,
i one nie działają przynajmniej dla mnie.
Tak, klawiatura znika, ale aplikacja ulega awarii !?
Głównym problemem jest to, że ukrywanie klawiatury dzieje się w tym samym czasie, gdy okno dialogowe znika.

Aby uniknąć powinno się nazywać w dialog.dismiss()view.postDelayed() po imm.hideSoftInputFromWindow() aw moim przypadku opóźnienia ustawiony jako 150.

5

miałem podobny problem przy zamykaniu okno ostrzegawcze. Wydaje mi się, że to mi wystarczy.

Wewnątrz DialogFragment

public static void closeKB(final View view) 
{ 
    caller.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }, 1); 
} 

@Override 
public void onDismiss(DialogInterface dialog) 
{ 
    super.onDismiss(dialog); 
      View view = getActivity().getCurrentFocus(); 
    if (view != null) 
    { 
     closeKB(view); 
    } 
} 
+0

To jest jedyna rzecz, która zadziałała dla mnie! Dziękuję Ci! –

Powiązane problemy