【问题标题】:How to show/Hide Navigation Drawer programmatically如何以编程方式显示/隐藏导航抽屉
【发布时间】:2015-12-11 12:56:10
【问题描述】:

如何使用按钮显示/隐藏导航抽屉,我使用this SO链接来创建和管理导航抽屉。

现在我正在使用(从左向右滑动 - 显示)和(从右向左滑动 - 隐藏)

如何使用下面屏幕截图中突出显示的按钮显示/隐藏抽屉:

header_home.xml:

<RelativeLayout        
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:id="@+id/header_layout" 
    android:gravity="fill_horizontal" 
    android:layout_gravity="top|center">


 <TextView
    android:id="@+id/textHeader"
    android:text="Home"
    android:textColor="#ffffff"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_header"
 />

 <ImageButton
    android:id="@+id/btnDrawer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:adjustViewBounds="true"
    android:background="@drawable/icon_drawer"
    android:contentDescription="@string/app_name"
    />

已编辑:

     btnMenu.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            drawer.openDrawer(Gravity.LEFT);                
        }
    });

我知道要关闭我必须打电话给drawer.closeDrawer(Gravity.LEFT);,但我必须把这段代码放在哪里?

【问题讨论】:

    标签: android navigation-drawer


    【解决方案1】:

    获取对DrawerLayout 的引用并调用closeDrawer(int) 将其关闭并调用openDrawer(int) 将其打开。 int 参数指的是重力。在您的情况下,它应该是 GravityCompat.LEFT/ GravityCompat.START,因为根据您发布的屏幕截图,您的 DrawerLayout 在左侧打开和关闭。

    【讨论】:

    • 谢谢你的伎俩对我有用,但我仍然不知道在哪里放置关闭抽屉的代码,检查我的编辑代码
    • 使用相同的按钮。 if (drawer.isDrawerOpen(Gravity.LEFT)) { // close } else {// open }
    • 关闭导航抽屉只需调用drawerLayout.closeDrawers()
    • 考虑使用Gravity.START支持不同的布局方向
    • 如果您使用 START 或 END 作为重力,您可能需要使用 GravityCompat
    【解决方案2】:

    关闭抽屉:

    drawer.CloseDrawer((int)GravityFlags.Left);
    

    打开抽屉:

    drawer.OpenDrawer((int)GravityFlags.Left);
    

    【讨论】:

      【解决方案3】:

      打开抽屉

      DrawerLayout drawer = findViewById(R.id.drawer_layout);
      drawer.openDrawer(GravityCompat.START);
      

      关闭抽屉

      DrawerLayout drawer = findViewById(R.id.drawer_layout);
      drawer.closeDrawer(GravityCompat.START);
      

      【讨论】:

        【解决方案4】:

        我可能会迟到,但这是您正在寻找的解决方案:

        btnMenu.setOnClickListener(new OnClickListener() {
        
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 if(drawer.isDrawerOpen(GravityCompat.START)){
                        drawerLayout.closeDrawer(GravityCompat.START);
                    }
                    else {
                        drawerLayout.openDrawer(GravityCompat.START);
                    }                
            }
        });
        

        【讨论】:

          【解决方案5】:

          如果您正在使用滑动抽屉菜单,并且您想在菜单打开时隐藏菜单(从右向左拖动时)。然后我们要处理listview对象的ontouch监听器。 代码会是这样的。

              //((( When we drage from Right to left then menu hide ))))
              lvMenu.setOnTouchListener(new OnTouchListener() {
                  @Override
                  public boolean onTouch(View v, MotionEvent event) {
          
                      switch (event.getAction()) 
                      {
                          case MotionEvent.ACTION_DOWN:
                              toggleMenu(v);                  
                              break;
          
                          case MotionEvent.ACTION_UP:
                              //showtoast("up");
                              break;
          
                          default:
                              return false;
                      }
                      return false;
                  }
          
          
              });
          
               public void toggleMenu(View v) {
              mLayout.toggleMenu();
          }
          

          完整的代码,有什么问题可以在这里评论

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-12
            相关资源
            最近更新 更多