17

我在 API 22 上使用 Android 设计库。我想:

  1. 有一个 Toolbar 和一个 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 的 app:layout_behavior="@string/appbar_scrolling_view_behavior" 设置无效,因为删除时,行为是相同的。

我尝试将 RelativeLayout 添加为 CoordinatorLayout 的子项,以定义抽屉位于工具栏等下方,但似乎没有任何效果。

我试图通过图书馆实现的目标是什么?

4

5 回答 5

11

如果您想查看汉堡图标和箭头的动画,请尝试以下操作。如果您包含 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>
于 2015-10-29T11:45:29.310 回答
3

是的!有可能的。

<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"工具栏在滚动时隐藏。RecyclerView代码底部的那个是里面的那个,DrawerLayout上面的那个是你的主要活动布局中的那个。

于 2015-08-05T15:49:03.240 回答
0

开发者页面

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

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

另外,您还没有添加 NavigationView。请在此处查看基本说明。

于 2015-06-08T22:05:21.250 回答
0

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

    <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工具栏将再次滚动出屏幕。

于 2015-11-04T11:12:56.697 回答
0

现在已经很长时间了,但我相信它仍然可以帮助某人。抽屉布局必须有一个子布局。根据android docs,它必须是FrameLayout,因为XML order 意味着z-ordering,并且drawer 必须位于内容之上。访问以下链接。

创建导航抽屉

在 FrameLayout 中添加您的 AppBarLayout、Toolbar、RecyclerView 和所有其他视图,并使其成为 Drawer Layout 的子级。希望它会运行。

于 2017-02-23T06:41:37.097 回答