2013-02-04 13 views
9

Quando cambio i frammenti. Lo sto usando per chiudere la tastiera perché c'è un campo EditText sullo schermo. Mi sento come se ci fosse un modo migliore, ma non ho trovato nulla sul rilevamento se la tastiera è sullo schermo.Android Nascondi tastiera quando si sostituiscono i frammenti

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

} 
+0

E 'difficile da rilevare la tastiera, l'API in realtà consente solo di attivare la tastiera. –

risposta

0

L'unico vero modo mi viene in mente sta usando il metodo di onConfigurationChanged(Configuration config):

Combinazione di KeyboardHidden e Configuration dovrebbe farlo.

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

} 

Questo ovviamente dipende da voi avere l'attività manifesto e genitore ad accettare questi come i cambiamenti di configurazione:

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

Inoltre si nota il Activity ha lo stesso metodo override, l'attività avrà la prima il metodo, quindi passalo allo Fragment s allegato.

Per l'osservatore si può fare questo al volo con un contesto:

Configuration config = getResources().getConfiguration(); 

Speranza che aiuta, e 'pensata per tenere conto hardKeyboards pure, ma sono sicuro che si incorrerà in qualche dispositivo specifico bug!

3

Nell'attività in cui si implementa la chiamata a vari frammenti, inserire il seguente ...

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