2012-07-24 7 views
29

Ich möchte weiche Tastatur nach AlertDialog entlassen, aber es ist immer noch sichtbar. Hier ist mein Code:Hide Soft-Tastatur nach dem Dialog zu schließen

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); 
    } 
}); 

Antwort

7
+0

Beide Methoden sind Gebrauch EditText Ansicht, aber ich habe es nicht. Ich habe keinen EditText. Es ist ein Dialog in meiner SettingsActivity. Wenn es geschlossen ist Tastatur zeigt :( –

+1

Wenn Ihre Tastatur Popups auf einem Dialog, bedeutet dies, dass Ihr Dialog einen EditText innerhalb haben muss. So können Sie den obigen Code schreiben, indem Sie das Fenster-Token von Ihrem EditText übergeben, und rufen Sie dialog.dismiss auf() – AndroidGuy

+0

oder wenn es nicht der obige Fall ist .. bedeutet, wenn Edittext nicht auf Ihrem Dialog ist, müssen Sie überprüfen, für welchen EditText es erscheint und es ausblenden, bevor der Dialog angezeigt wird.Wenn dies auch nicht funktioniert, geben Sie Ihren Code . – AndroidGuy

3

Ich benutze diese Methode:

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

Wo searchTextEntry ist der Name meiner EditText Referenz.

+0

Ich habe nicht EditText. Es ist ein Dialogfeld in meiner SettingsActivity. Wenn es geschlossen ist Tastatur zeigt :( –

14

Ich traf das gleiche Problem. So etwas gelöst. Es braucht keinen Hinweis:

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

+1 für eine gute Antwort. – BBdev

+0

das funktioniert richtig, wenn Sie versuchen, von einem DialogFragment zu verbergen – Kammaar

+0

Aber es lässt vorübergehend einen weißen Schatten, wie man den weißen Schatten verhindert? –

61

In Manifest xml fokussiert ist

android: windowSoftInputMode = "stateAlwaysHidden"

Es wird automatisch Soft-Tastatur versteckt auf Entlassen von Dialog

+2

Einfach und effektiv ... Danke !!! –

+2

Dies sollte die akzeptierte Antwort sein! Es ist eine schlechte Praxis, die in AndroidManifest.xml deklarierten Eigenschaften zu überschreiben. – Renjith

+0

@Renjith können Sie bitte erläutern, warum es schlecht ist – Rajeshwar

0

diese Ratschläge All InputMethodManager etwas vage zu bedienen ist - wo genau es zu nennen,
und sie für mich nicht zumindest arbeiten.
Ja, Tastatur verschwindet aber dann stürzt die App ab !?
Das Hauptproblem ist, dass das Ausblenden der Tastatur zur gleichen Zeit stattfindet, wenn der Dialog verschwindet.

Um es zu vermeiden dialog.dismiss() soll ich Verzögerung in view.postDelayed() nach imm.hideSoftInputFromWindow() und in meinem Fall genannt werden, als 150.

5

Ich hatte ein ähnliches Problem, wenn eine Warnung Dialog zu schließen. Das scheint mir den Trick zu geben.

In Ihrem 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

Das ist das einzige, was für mich funktioniert hat! Vielen Dank! –

Verwandte Themen