确定NavigationDrawer是打开还是关闭

时间:2014-03-23 12:15:23

标签: android navigation-drawer

我有什么方法可以确定导航抽屉是打开还是关闭?我已阅读有关isDrawerOpen()isDrawerVisible()方法的信息,但只有在导航抽屉打开或分别可见时,它们才会返回true。

我还读到了关于抽屉移动时调用的onDrawerSlide(View drawerView, float slideOffset)方法。 slideOffset是0到1之间的浮动值,告诉抽屉现在处于哪个位置。但是当抽屉打开关闭时,即使这个被调用。

我需要做的是,只在抽屉打开时做某事而不是在关闭时做某事,有些东西告诉我必须使用onDrawerSlide(View drawerView, float slideOffset)方法,但我无法弄清楚如何检查如果它正在打开而且没有关闭。

谢谢

3 个答案:

答案 0 :(得分:14)

跟踪最后一个值是一个选项......

drawerLayout.setDrawerListener(new DrawerListener() {

        private float last = 0;

        @Override
        public void onDrawerSlide(View arg0, float arg1) {

            boolean opening = arg1>last;
            boolean closing = arg1<last;

            if(opening) {
                Log.i("Drawer","opening");
            } else if(closing) {
                Log.i("Drawer","closing");
            } else {
                Log.i("Drawer","doing nothing");
            }

            last = arg1;
        }

        @Override public void onDrawerStateChanged(int arg0) {}
        @Override public void onDrawerOpened(View arg0) {}
        @Override public void onDrawerClosed(View arg0) {}

    });

答案 1 :(得分:0)

如果您使用ActionBar覆盖ActionBarDrawerToggle

进一步阅读: Listen for Open and Close Events on developer.android.com

答案 2 :(得分:0)

setDrawerListener方法现在为deprecated。完成此操作的新方法是使用addDrawerListener方法。

在科特林

  1. 初始化DrawerLayout视图

    val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)

  2. 在您的主要活动中,创建一个内部类,该内部类是DrawerLayout.DrawerListener的子类。 DrawerLayout类实现DrawerListener接口。您可以在onDrawerSlide(上面答案的科特林化版本)中跟踪变化的抽屉位置:

    inner class CustomDrawer : DrawerLayout.DrawerListener{
      override fun onDrawerStateChanged(newState: Int) {
      }
    
    var last: Float = 0f
    
    override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
    
        var opening: Boolean = slideOffset>last
        var closing: Boolean = slideOffset<last
    
        if(opening) {
            Log.i("Drawer","opening")
            Log.d("Last",last.toString())
        } else if(closing) {
            Log.i("Drawer","closing")
            Log.d("Last",last.toString())
        } else {
            Log.i("Drawer","doing nothing")
            Log.d("Last",last.toString())
        }
    }
    
    override fun onDrawerClosed(drawerView: View) {
    
      }
    
    override fun onDrawerOpened(drawerView: View) {
    
      }
    }
    
  3. 将您的自定义DrawerListener添加到抽屉布局(我将其放在onCreate方法中)

    var drawerListener = CustomDrawer() drawerLayout.addDrawerListener(drawerListener)