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

Posted

技术标签:

【中文标题】如何以编程方式显示/隐藏导航抽屉【英文标题】: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_
    android:layout_
    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_
    android:layout_
    android:background="@drawable/bg_header"
 />

 <ImageButton
    android:id="@+id/btnDrawer"
    android:layout_
    android:layout_
    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);,但我必须把这段代码放在哪里?

【问题讨论】:

【参考方案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();

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

【讨论】:

以上是关于如何以编程方式显示/隐藏导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 8 中以编程方式隐藏状态栏 [重复]

Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏

如何强制显示移动 Safari 底部导航栏以编程方式显示?

如何以编程方式显示/隐藏 BottomAppBar?

如何隐藏openoffice writer中的导航按钮

当它隐藏在另一个片段中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView