2013-07-07 19 views
17

Mam fragment z edittext w nim. po kliknięciu na edittext pojawia się klawiatura. Problem polega na tym, kiedy otwieram szufladę, szuflada nie ukrywa klawiatury. klawiatura wciąż pokazuje się, a ja przełączam się na inny fragment. Jak ukryć klawiaturę po otwarciu szuflady.szuflada nawigacji ukryj klawiaturę, gdy onDrawerOpened

próbuję umieścić

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

i

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

zarówno z nim nie ukryć klawiaturę.

Odpowiedz

25

skorzystaj z tego wiersza kodu przed ope/zamykania szuflady slajdów

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

Zawsze miałem problemy z uzyskaniem 'WindowToken' z' EditText' podczas używania 'Fragmentów' (będąc w' NavigationDrawer' lub 'ViewPager'). 'Activity.getCurrentFocus()' było jedyną rzeczą, której mi brakowało. Wielkie dzięki. – shkschneider

1

Problem polega na tym, że getWindowToken() musi zostać wywołany z widoku, który aktualnie "trzyma" klawiaturę. To bardzo denerwujące, zgadzam się z tobą, ale tak to działa.

Na przykład powiedzmy: EditText mEditText to obiekt, który jest aktualnie w trybie ostrości, odbiera naciśnięcia klawiszy klawiatury. Twój kod będzie więc następujący:

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

nadzieję, że to pomoże.

23

spróbować tego ...

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

Szczęśliwy kodowanie ...

+0

Dziękuję bardzo. To rozwiązało mój problem :)) –

+0

cześć, daje mi wyjątek wskaźnika pustego, jeśli (szuflada! = Zerowy) { drawer.setDrawerListener (toggle); hideKeyboard (this); } i nie mogę dokonać żadnych zmian w ActionBarDrawerToggle w Android studio, używając appcompatv7. Proszę o pomoc – Pihu

+0

Proszę sprawdzić obiekt detektora ActionBarDrawerToggle, jeśli nie jest on właściwie zaimplementowany, może być podatny na wyjątek wskaźnika pustego. –

Powiązane problemy