Selbst wenn RecyclerView oder ViewPager im DrawerLayout festgelegt ist, wird die Bewegung zum Schließen der Schublade für das horizontale Scrollen priorisiert, und das vertikale Scrollen und das Umschalten der Tabulatortaste werden durch die Schließbewegung gezogen, sodass sie nicht bequem bedient werden kann.
Mit den folgenden Einstellungen können Sie die Bewegung beenden, um die Schublade zu schließen, die beim horizontalen Scrollen im DrawerLayout auftritt. Sie können die Schublade auch schließen, indem Sie horizontal von der Außenseite der Schublade scrollen.
//In Aktivität usw., wo DrawerLayout festgelegt ist
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DrawerLayout.DrawerListener drawerListener = new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
//Deaktivieren Sie das horizontale Scrollen in der Schublade sofort nach dem Öffnen
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
}
@Override
public void onDrawerClosed(View drawerView) {
//Wenn geschlossen,Aktivieren Sie das horizontale Scrollen
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
}
@Override
public void onDrawerStateChanged(int newState) {
//Bei geöffneter Schublade ändert sich der Zustand,Wenn die Schublade wieder geöffnet ist,Deaktivieren Sie das horizontale Scrollen in der Schublade
if (newState == DrawerLayout.STATE_IDLE && mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
}
}
};
mDrawerLayout.addDrawerListener(drawerListener);
mDrawerLayout.setOnTouchListener((v, event) -> {
//Beim Berühren der Außenseite der Schublade,Aktivieren Sie das horizontale Scrollen
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) && event.getAction() == MotionEvent.ACTION_DOWN) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
}
return false;
});
}