如何通过编程方式显示/隐藏导航抽屉

56

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

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

我如何使用下面截图中突出显示的按钮来显示/隐藏抽屉?

enter image description here

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); 但是我应该在哪里放置这段代码呢?
5个回答

97

获取DrawerLayout的引用并调用closeDrawer(int)关闭它,调用openDrawer(int)打开它。这里的int参数是指重力方向,根据您发布的截图,应该使用GravityCompat.LEFT/GravityCompat.START,因为您的DrawerLayout是从左侧打开和关闭的。


谢谢,你的技巧对我很有帮助,但我仍然不知道在哪里放置关闭抽屉的代码,请检查我的编辑后的代码。 - Sun
6
使用相同的按钮。如果(drawer.isDrawerOpen(Gravity.LEFT)) { // 关闭 } else { // 打开 } - Blackbelt
1
要关闭导航抽屉,只需调用drawerLayout.closeDrawers()。 - Abc.Xyz
1
考虑使用 Gravity.START 来支持不同的布局方向。 - Amr Saber
在2015年,还没有GravityCompat - Blackbelt
显示剩余2条评论

14

关闭抽屉:

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

打开抽屉:

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

6

打开抽屉

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

关闭抽屉。
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);

3

可能我来晚了,但这就是你要找的解决方案:

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);
            }                
    }
});

-2
如果您正在使用滑动抽屉菜单,并且希望在打开菜单时隐藏菜单(从右向左拖动),那么我们必须处理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();
}

如果你有任何问题,可以在这里放置评论来获取完整的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接