我在我的activity中使用了android.support.v4.widget.DrawerLayout
。只要我使用滑动手势打开它,它就可以正常工作。
然而,当我想通过调用drawer.openDrawer(Gravity.LEFT)
来通过按钮点击打开它时,它就无法工作。
但是,如果我先使用滑动手势打开它,之后再点击按钮它就能正常工作了。
有没有什么办法可以解决或解决这个问题?
我在我的activity中使用了android.support.v4.widget.DrawerLayout
。只要我使用滑动手势打开它,它就可以正常工作。
然而,当我想通过调用drawer.openDrawer(Gravity.LEFT)
来通过按钮点击打开它时,它就无法工作。
但是,如果我先使用滑动手势打开它,之后再点击按钮它就能正常工作了。
有没有什么办法可以解决或解决这个问题?
我遇到了同样的问题,后来发现抽屉所表示的FrameLayout的可见性被设置为“gone”,可能在第一次滑动手势时变为“visible”。
因此,请打开您的布局xml文件,找到代表抽屉的FrameLayout,并简单地删除可见性设置。我的开放标签现在如下所示:
<FrameLayout
android:layout_width="305dp"
android:layout_height="match_parent"
android:layout_gravity="start">
这对我很有效。
谢谢
如果您想从左上角切换打开它,您应该实现onOptionsItemSelected(MenuItem item)
方法。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// The action bar home/up action should open or close the drawer.
// ActionBarDrawerToggle will take care of this.
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
switch (item.getItemId()) {
case android.R.id.home:
return true;
}
return super.onOptionsItemSelected(item);
}
遇到了同样的问题,并且通过在布局中指定抽屉内容元素的宽度来解决了该问题。
如果没有layout_width属性,则在第一次openDrawer()调用时,抽屉不会打开, 有了这个值则可以打开。
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<FrameLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#ffffff"
android:id="@+id/drawer_content">
</FrameLayout>
DrawerLayout
对象中使用clearFocus()
方法。您可以将此代码放入您的DrawerLayout
中:
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
太蠢了,我设置了一个空布局, 问题就像上面描述的那样,当手动拖动抽屉第一次后,按钮才能工作,但是如果没有先拖动它,导航抽屉就永远不会打开。
不要设置空布局。
从表示NavigationDrawerContent的ListView中删除我的EmptyLayout使其再次完美运行。
不要这样做
drawerContentListView.setEmptyView(getLayoutInflater().inflate(R.layout.navigation_drawer_empty_layout, null));
**** 让我花费了一个多小时的时间。