2013-07-07 2 views
17

Ho un frammento con edittext in esso. quando faccio clic su edittext, la tastiera appare. il problema è quando apro il cassetto, il cassetto non nasconde la tastiera. la tastiera sta ancora mostrando anche io passare ad un altro frammento. Come posso nascondere la tastiera quando apro il cassetto.drawer di navigazione nascondi tastiera quando onDrawerOpened

Io cerco di mettere

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

e

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

sia di esso non nascondere la tastiera.

risposta

25

si prega di utilizzare questa riga di codice prima di OPE/chiudere il cassetto scorrevole

InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); 
+0

Ho sempre avuto problemi a ottenere un 'WindowToken' da un' EditText' durante l'uso di 'Fragments' (essendo in' NavigationDrawer' o 'ViewPager'). 'Activity.getCurrentFocus()' era l'unica cosa che mi mancava. Grazie molto. – shkschneider

1

il problema è che getWindowToken() deve essere richiamato dalla vista che attualmente "tiene" la tastiera. È molto fastidioso, sono d'accordo con te, ma è così che funziona.

Ad esempio, supponiamo che EditText mEditText sia l'oggetto attualmente a fuoco che riceve i tasti della tastiera. Quindi il tuo codice sarebbe:

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

spero che sia d'aiuto.

23

Prova questa ...

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ...... 

    //Initialize 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    //Setting the actionbarToggle to drawer layout 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    //calling sync state is necessay or else your hamburger icon wont show up 
    actionBarDrawerToggle.syncState(); 

} 

DrawerListerner:

ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.app_name, R.string.app_name) { 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
      super.onDrawerClosed(drawerView); 
      InputMethodManager inputMethodManager = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 
      super.onDrawerOpened(drawerView); 
      InputMethodManager inputMethodManager = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
     } 
    }; 

Felice di codifica ...

+0

Grazie mille. Questo è risolto il mio problema :)) –

+0

ciao signore, mi dà un'eccezione di puntatore nullo se (drawer! = Null) { drawer.setDrawerListener (toggle); hideKeyboard (questo); } e non posso apportare alcuna modifica in ActionBarDrawerToggle in Android Studio, usando appcompatv7. Si prega di aiutare – Pihu

+0

Si prega di controllare il vostro oggetto listener ActionBarDrawerToggle, se non implementato correttamente potrebbe essere soggetta a eccezione puntatore nullo. –