Wie schließt ich die Tastatur, wenn die Navigationsschublade öffnet?

Ich habe mir eine Navigationsschublade hinzugefügt. So weit alles funktioniert gut, aber ich habe ein Problem wo wo die Navigationsschublade öffnet sich die Tastatur ist nicht geschlossen. Die Navigationsschublade ist die Haupttätigkeit und dann jede Seite, die von der Schublade geöffnet ist, ist ein Fragment.

Ich habe versucht, die folgenden zu jedem meiner EditText Bereiche in den Fragmenten hinzuzufügen. Das schließt aber nichts.

InputMethodManager imm1 = (InputMethodManager)getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); imm1.hideSoftInputFromWindow(input1.getWindowToken(), 0); 

Ich habe auch versucht, diesen Code in die Haupttätigkeit zu stellen, aber auch dort nicht erfolgreich gewesen. Irgendwelche Ideen auf was ich anders machen kann, um diese Arbeit zu bekommen?

  • Ausgabe mit Schubschublade und Animationen
  • Getting DrawerLayout, um über die ActionBar zu schieben
  • SlidingDrawer veraltet
  • TabLayout und ViewPager -Tabs funktioniert nicht nach dem Swiping zwischen Schiebe-Schubladen
  • Hinzufügen einer Schaltfläche zu einem SlidingDrawer-Handle?
  • Wie man SlidingDrawer transparent macht
  • Wie macht man einen Android SlidingDrawer aus der linken Seite?
  • SlidingDrawer über GoogleMap
  • 8 Solutions collect form web for “Wie schließt ich die Tastatur, wenn die Navigationsschublade öffnet?”

    Um eine offene Tastatur beim Öffnen oder Schließen der Navigationsschublade zu verbergen, überschreiben Sie bitte die Methode onDrawerSlide in onDrawerListner und fügen Sie die untere Zeile hinzu

     InputMethodManager inputMethodManager = (InputMethodManager) actionBarActivity .getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow( actionBarActivity.getCurrentFocus().getWindowToken(), 0 ); 
     final DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } }; drawer.setDrawerListener(actionBarDrawerToggle); actionBarDrawerToggle.syncState(); 

    Dies ist der gesamte Code, den ich hinzugefügt habe, um das gewünschte Ergebnis zu erzielen:

      // Hide keyboard when navigation drawer is open drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener(){ @Override public void onDrawerSlide(View drawerView, float slideOffset) {} @Override public void onDrawerOpened(View drawerView) {} @Override public void onDrawerClosed(View drawerView) {} @Override public void onDrawerStateChanged(int newState) { //DeviceUtils.hideVirtualKeyboard(LaunchActivity.this, drawerLayout); final InputMethodManager imm = (InputMethodManager)LaunchActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(drawerLayout.getWindowToken(), 0); } }); 

    Das hat mir sehr gut geklappt:

     private ActionBarDrawerToggle aDrawerToggle; private DrawerLayout aDrawerLayout; 

    Ich benutze diesen Code in einer Leere nach dem Erstellen der Klasse:

      aDrawerToggle = new ActionBarDrawerToggle(getActivity(), aDrawerLayout, R.drawable.main_icon, R.string.drawer_open, R.string.drawer_close){ @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (!isAdded()) { return; } InputMethodManager inputMethodManager = (InputMethodManager)getActivity().getSystemService( Context.INPUT_METHOD_SERVICE); //inputSearch is my EditText inputMethodManager.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); getActivity().supportInvalidateOptionsMenu(); } } 

    Füge dein DrawerLayout einen DrawerListener hinzu. Dann kannst du den obigen Code benutzen, um die Tastatur in der onDrawerOpened () – Methode zu schließen

    In onCreate:

     DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() { @Override public void onDrawerSlide(View drawerView, float slideOffset) { } @Override public void onDrawerOpened(View drawerView) { } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerStateChanged(int newState) { InputMethodManager imm = (InputMethodManager)getSystemService(Context. INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } }); 

    Probieren Sie diesen Code, ich benutze es in meinen Apps und zum Beispiel, wenn ich einen Dialog öffne, der einen EditText enthält, setze ich diesen Code auf create.Hope das hilft

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

     This does not solve issue. Correct solution is: Override below method on your main activity: public boolean dispatchTouchEvent(MotionEvent ev) { View view = getCurrentFocus(); boolean ret = super.dispatchTouchEvent(ev); if(drawer_open) { 

    // tut nichts, wenn slider open} else {if (view instanceof EditText) {View w = getCurrentFocus (); Int scrcoords [] = neu int [2]; W.getLocationOnScreen (scrcoords); Float x = ev.getRawX () + w.getLeft () – scrcoords [0]; Float y = ev.getRawY () + w.getTop () – scrcoords [1];

      if (ev.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom())) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0); } } return ret; } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.