Как определить, открыт ли навигационный ящик?

Название объясняет все это. Все, что я хочу сделать, это знать, открыт ли ящик навигации или нет. Я много искал в сети и нашел метод isDrawerOpen(int drawerGravity), но не смог найти удовлетворительного ответа, в котором объясняется, как использовать его в методе. Буду признателен, если кто-нибудь объяснит это мне.

Спасибо заранее!

Ответ 1

Предполагая, что вы определили drawerlayout в xml:

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
...
if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
  //drawer is open
}

Ответ 2

 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            mDrawerLayout,         /* DrawerLayout object */
            R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description */
            R.string.drawer_close  /* "close drawer" description */
            ) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getActionBar().setTitle(mTitle);
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getActionBar().setTitle(mDrawerTitle);
        }
    };

    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);

Этот слушатель использует:)

Ответ 3

Использование:

Метод mDrawerLayout.isDrawerOpen()

Пример:

    if(mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
        mDrawerLayout.closeDrawer(Gravity.LEFT); //CLOSE Nav Drawer!
    }else{
        mDrawerLayout.openDrawer(Gravity.LEFT); //OPEN Nav Drawer!
    }

Ответ 4

shakeJ ответит на его правильный, и помните, что вы можете использовать onDrawerSlide, чтобы иметь возможность запускать другие функции... например, я использовал его для изменения цвета StatusBar.

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            isOpen = false;
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            isOpen = true;
        }
        public void onDrawerSlide(View drawerView,float slideOffset){
            super.onDrawerSlide(drawerView,slideOffset);
            if(!isOpen){
                setStatusBarColor("#00102b");
            }
            if(isOpen){
                setStatusBarColor("#EFEFF0");
            }
        }

Ответ 5

Следующим способом вы можете найти ящик открытым или закрытым.

 public class YourActivity extends AppCompatActivity implements  DrawerLayout.DrawerListener {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dash_board);

        DrawerLayout drawer=(DrawerLayout)findViewById(R.id.container);
        drawer.setDrawerListener(this);
    }//onCreate()

    @Override
    public void onDrawerOpened(View arg0) {
      //write your code
    }

    @Override
    public void onDrawerClosed(View arg0) {
        //write your code
    }

    @Override
    public void onDrawerSlide(View arg0, float arg1) {
        //write your code
    }

    @Override
    public void onDrawerStateChanged(int arg0) {
        //write your code
    }
}//class

Ответ 6

Обнаружение DrawerLayout открыто, закрыто, слайд DrawerLayout.DrawerListener

DrawerLayout drawerLayout:
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
    /**
     * Called when a drawer position changes.
     *
     * @param slideOffset The new offset of this drawer within its range, from 0-1
     *                    Example when you slide drawer from left to right, slideOffset will increase from 0 - 1 (0 when drawer closed and 1 when drawer display full)
     */
    @Override
    public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {

    }

    @Override
    public void onDrawerOpened(@NonNull View drawerView) {
        // do something when drawer opened
    }

    @Override
    public void onDrawerClosed(@NonNull View drawerView) {
        // do something when drawer closed
    }

    /**
     * Called when the drawer motion state changes. The new state will
     * be one of {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
     */
    @Override
    public void onDrawerStateChanged(int newState) {

    }
});

Проверьте ящик открыт

if(drawerLayout.isDrawerOpen(GravityCompat.START)) // or  GravityCompat.END

Ответ 7

DrawerLayout Mydrawer = (DrawerLayout)findViewByid(R.id.drawerId);
if(Mydrawer.isDrawerOpen(Gravity.START)) {
  //on opened do something
} else {
  //on closed do something
}