Toolbar隐藏了PagerTitleStrip和部分RecyclerView

Toolbar hides PagerTitleStrip and part of RecyclerView

Screenshot 1Screenshot 2 我的应用

问题基本上是这样的:即使我已将 layout_behaviour 设置为我的 ViewPager,PagerTitleStrip 和 RecyclerView 仍低于我的工具栏。

更多详情:

我有一个主要的 activity,它使用下面的布局,然后从中启动片段。在尝试 CoordinatorLayout + ViewPager 和所有其他花哨的东西之前,我只有一个 FrameLayout,我在其中显示了我的片段。但是,我决定使用

app:layout_scrollFlags="scroll|enterAlways"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

这样当我滚动 recyclerview 时我的工具栏就会消失。我在网上发现 FrameLayout 没有任何行为允许我修复工具栏下方的 recyclerView 的位置,这就是为什么我更改为 ViewPager + CoordinatorLayout 来管理我的片段。

但是,这引入了一些问题。我想要实现的是 - 一个附有 PagerTitleStrip 的工具栏,当我滚动工具栏时,工具栏消失,理想情况下让 PagerTitleStrip 可见,也许它也隐藏起来,我不太关心这个。但我希望我的导航抽屉继续工作,但它没有。就像不存在一样。

现在,第一个布局实际上具有上述所有功能,但问题是条带位于工具栏下方,除非我滚动时工具栏隐藏,否则它是不可见的。抽屉工作。不幸的是,Recycler 视图项目部分隐藏在工具栏下方 - 即使我设置了它们,它们也不会从屏幕的右侧开始滚动 - appbar_scrolling_view_behavior

我的主要 activity 充气布局 m_drawerlayout.xml:

<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/coordinatorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="6dp"
            android:paddingBottom="6dp"
            android:layout_gravity="top"
            android:textSize="15sp"
            android:textColor="@color/tealfifty"
            android:background="@color/teal">

        </android.support.v4.view.PagerTitleStrip>
    </android.support.v4.view.ViewPager>
    <ListView
        android:id="@+id/drawer_list"
        android:background="@color/tealDark"
        android:cacheColorHint="@android:color/transparent"
        android:choiceMode="singleChoice"
        android:divider="@drawable/list_divider"
        android:dividerHeight="1dp"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include layout="@layout/app_bar"/>

</android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>

这是我的 app_bar.xml

的代码
<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/top_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/teal"
app:theme="@style/ToolbarTheme"
app:popupTheme="@style/Green.Overlay.LightPopup"
app:layout_scrollFlags="scroll|enterAlways" >

<Spinner android:id="@+id/spinner"
    android:layout_gravity="right"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawSelectorOnTop="true"
    android:paddingRight="20dp"
    />
</android.support.v7.widget.Toolbar>

我尝试在其他组件中来回移动元素,进出其他组件,但没有成功。例如,使 PagerTitleStrip 附加到工具栏并共享一个行为似乎是合乎逻辑的,我必须将 PagerTitleStrip 嵌套在 AppBar 布局中,但 PagerTitleStrip 必须是 ViewPager 的直接子项才能工作......任何建议这一切?我是所有这些设计功能的新手,我研究了很多但没有成功,这里有类似的主题,但根本不是我需要的。与其他基本主题相比,互联网上似乎几乎没有关于我在上面尝试做的事情(有一些)。

如果有人想知道为什么我在没有选项卡时使用 ViewPager,那是因为正如我所说,FrameLayout 没有允许我正确使用消失的工具栏的行为,我发现这很好用。我还看到 NestedScrollView 可以使用,但我从来没有使用过它......我现在想可能使用 ViewPagerTitle,我想它限制了我对片段的 ViewPager。

问题出在:

<android.support.design.widget.CoordinatorLayout 

<android.support.v4.widget.DrawerLayout

DrawerLayout 应该是根布局。

请看:http://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout

To add a navigation drawer, declare your user interface with a DrawerLayout object as the root view of your layout. Inside the DrawerLayout, add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of the navigation drawer.

此外,不建议使用ListView代替NavigationView

这是文档建议的方法(除了 ListView:)):

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>

还有:

However, that introduced a few problems. What I want to achieve is - A Toolbar with a PagerTitleStrip attached to it, when I scroll the toolbar disappears leaving the PagerTitleStrip visible ideally, maybe it hides as well I don't care that much about that. But I want my Navigation Drawer to keep working and it doesn't.

查看我的回答:

您只需像这样将工具栏放在 CollapsingToolbarLayout 中:

<android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingtoolbarly"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|snap">

            <android.support.v7.widget.Toolbar
                android:id="@+id/my_toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:elevation="4dp"
                android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="190dp"
                android:minHeight="190dp"
                android:scaleType="fitXY"
                android:src="@drawable/header"
                app:layout_collapseMode="parallax" />

        </android.support.design.widget.CollapsingToolbarLayout>

如果要保留PagerTitleStrip(现在推荐使用TabLayout),that.And后应该收起,Toolbar会隐藏,放在[=下面就可以了27=] 及以上 </android.support.design.widget.AppBarLayout> 像这样:

</android.support.design.widget.CollapsingToolbarLayout>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:background="?attr/colorPrimary" />

    </android.support.design.widget.AppBarLayout>

差不多就这些了,祝你好运。