如何检查导航抽屉是否打开?

时间:2015-04-20 12:46:29

标签: android android-fragments navigation navigation-drawer

我有一个带导航抽屉的活动。以下是我的代码。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(dLayout.isDrawerOpen(GravityCompat.START)==true) {
                 dLayout.closeDrawers();
                }

            else
            {
            doExit();
            }
        }

        return super.onKeyDown(keyCode, event);
    }

    private void doExit() {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(
                FirstSelection.this);

        alertDialog.setPositiveButton("Yes", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });

根据此代码,当用户按下后退按钮时,导航抽屉如果打开则关闭,否则调用doExit();方法。但在我的情况下,else条件工作正常,但当抽屉打开时按下后退按钮,完整的应用程序关闭。我遵循了这段代码How to detect if navigation drawer is open?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:8)

DrawerLayout方法isDrawerOpen(listView)返回true或false这对我有帮助

if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
            mDrawerLayout.closeDrawer(mDrawerList);
        } 

在onBackPressed

中添加上述代码

答案 1 :(得分:0)

这是在Kotlin中执行此操作的一般步骤。

  1. 初始化DrawerLayout视图

    val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
    
  2. 检查抽屉是否打开

    if(drawerLayout.isDrawerOpen(GravityCompat.START)){
        Log.d("Drawer","open")
    }
    

如果要在打开或关闭抽屉时自动执行操作,则可以执行以下操作。

  1. 在您的主要活动中,创建一个内部类,该内部类是DrawerLayout.DrawerListener的子类。 DrawerLayout类实现DrawerListener接口。

    inner class CustomDrawer : DrawerLayout.DrawerListener{
      override fun onDrawerStateChanged(newState: Int) {
      }
    
      override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    
      override fun onDrawerClosed(drawerView: View) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    
      override fun onDrawerOpened(drawerView: View) {
        imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
      }
    }
    
  2. 将操作添加到要使用的功能中。在我的示例中,如果用户与导航抽屉进行交互,则我将关闭软键盘。在您的主要活动中这样声明InputMethodManager:

    var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
    
  3. 将您的自定义DrawerListener添加到抽屉布局(我将其放在onCreate方法中)

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