Androiddevise库CoordinatorLayout,AppBarLayout和DrawerLayout

我在API 22上使用Androiddevise库。我想:

  1. 有一个工具栏和一个DrawerLayout里面有一个RecyclerView
  2. DrawerLayout在工具栏下方; 例如,当工具栏可见时,抽屉的主要内容应位于其下方,而(左)抽屉也应位于其下方,以便在展开时,工具栏仍可见
  3. 当回收站视图向下滚动时,工具栏会从屏幕上滚动出来

这甚至有可能吗? 我有问题要结婚#2和#3。 现在的方式是,工具栏始终位于抽屉布局的上方,覆盖了回收站中的第一个入口以及左侧抽屉的顶部。 这是我的布局文件(不完整,但显示我的结构):

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"/> </android.support.v4.widget.DrawerLayout> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Toolbar android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout> 

它看起来像虽然RecyclerView的应用程序:layout_behavior =“@string/ appbar_scrolling_view_behavior”设置没有效果,因为删除时,行为是相同的。

我尝试添加一个RelativeLayout作为CoordinatorLayout的子项来定义抽屉在工具栏下面,但似乎没有任何工作。

我正在试图与图书馆达成什么?

Solutions Collecting From Web of "Androiddevise库CoordinatorLayout,AppBarLayout和DrawerLayout"

如果您想查看汉堡包图标和箭头的animation,请尝试以下操作。 如果您为NavigationView添加顶部边距(layout_marginTop),则会将其向下移动。

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navigation_drawer" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> <!-- main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_light" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> <!-- The navigation drawer --> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="?attr/actionBarSize" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/drawer_menu"/> </android.support.v4.widget.DrawerLayout> 

是! 有可能的。

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawerLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".StartupActivity"> <android.support.design.widget.AppBarLayout android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlways" app:theme="@style/Theme.AppCompat.NoActionBar"/> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/scrollRecyclerView" android:layout_width="match_parent" android:layout_height="fill_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> <android.support.v7.widget.RecyclerView android:id="@+id/drawer_recycler_view" android:layout_width="320dp" android:layout_height="match_parent" android:layout_gravity="left|start" android:background="@color/WhiteColor" android:fitsSystemWindows="true" android:scrollbars="vertical"/> </android.support.v4.widget.DrawerLayout> 

正如你所看到的,重要的是你设置app:layout_scrollFlags="scroll|enterAlways"来让你的工具栏在滚动时隐藏。 代码底部的RecyclerViewDrawerLayout中的一个,上面的是您主要活动布局中的一个。

从开发者页面 :

DrawerLayout作为窗口内容的顶级容器,允许从窗口边缘拉出交互式“抽屉”视图。

首先尝试将DrawerLayout作为顶级容器(即父级布局)。 然后将CoordinatorLayout放置在下面,看看会发生什么。

另外你还没有添加NavigationView。 请查看这里的基本说明。

尝试这个应该工作,为我工作。

  <android.support.design.widget.CoordinatorLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <android.support.v7.widget.RecyclerView android:id="@+id/scrollingRecyclerView" android:layout_width="match_parent" android:layout_height="fill_parent" /> <!-- The navigation drawer --> <FrameLayout android:id="@+id/right_frame" android:layout_height="match_parent" android:layout_gravity="start"/> (whatever) </android.support.v4.widget.DrawerLayout> </android.support.design.widget.CoordinatorLayout> 

滚动行为必须设置为CoordinatorLayout的直接子(到DrawerLayout)。 这应该解决你的#2#3的问题。 如果您的抽屉内容包含recyclerView 工具栏将再次滚动屏幕。

现在已经很长时间了,但我相信它仍然有助于某人。 抽屉布局必须有一个孩子布局。 根据Android文档,它必须是FrameLayout,因为XML顺序意味着z顺序,而且抽屉必须位于内容之上。 访问下面的链接。

创build一个导航抽屉

在FrameLayout中添加AppBarLayout,工具栏,RecyclerView和所有其他视图,并使其成为抽屉布局的子项。 希望它会运行。