2013-02-04 11 views
9

Wenn ich Fragmente ändern. Ich benutze dies, um die Tastatur zu schließen, da ein EditText-Feld auf dem Bildschirm vorhanden ist. Ich habe einfach das Gefühl, dass es einen besseren Weg geben muss, aber ich habe nichts gefunden, wenn ich feststellen musste, ob die Tastatur auf dem Bildschirm ist.Android Tastatur beim Ändern von Fragmenten ausblenden

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

} 
+0

Es ist schwierig, die Tastatur, die API wirklich nur zu erkennen, können Sie die Tastatur ausgelöst werden. –

Antwort

0

Die einzige wirkliche Möglichkeit, die ich denken kann, ist mit der onConfigurationChanged(Configuration config) Methode:

Kombination von KeyboardHidden und Configuration sollte es tun.

class MyFrag extends Fragment{ 

    @Override 
    public void onConfigurationChanged(Configuration config){ 
    //Check flags 
    switch(config.keyboardHidden){ 
     case KEYBOARDHIDDEN_NO: 
     // do something 
     break; 
     case KEYBOARDHIDDEN_YES: 
     break; 
    } 
    } 

} 

Dies natürlich stützt sich auf Sie das Manifest und Mutter Aktivität diese als Konfigurationsänderungen akzeptieren:

<activity ... 
    android:configChanges="keyboardHidden|orientation|screenSize|screenLayout"/> 

Auch werden Sie feststellen, die Activity die gleiche überschreibbare Methode hat, wird die Aktivität erhalten die Methode zuerst, dann weiterleiten an die beigefügten Fragment s.

Für den aufmerksamen Sie dies einen Zusammenhang mit on the fly tun können:

Configuration config = getResources().getConfiguration(); 

Hoffnung, dass es hilft, soll auch berücksichtigt hardKeyboards nehmen, aber ich bin sicher, dass Sie in eine gerätespezifische laufen werden Fehler!

3

In der Tätigkeit, wo Sie die Berufung auf verschiedene Fragmente implementieren, setzen die folgenden ...

InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 
Verwandte Themen