如何以编程方式显示/隐藏导航抽屉
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();
完整的代码,有什么问题可以在这里评论
【讨论】:
以上是关于如何以编程方式显示/隐藏导航抽屉的主要内容,如果未能解决你的问题,请参考以下文章
Android - 为带有导航抽屉和应用栏的应用完全隐藏状态和导航栏
当它隐藏在另一个片段中时,以编程方式在 CoordinatorLayout 中显示 BottomNavigationView