【问题标题】:Toolbar hides PagerTitleStrip and part of RecyclerView工具栏隐藏了 PagerTitleStrip 和 RecyclerView 的一部分
【发布时间】:2016-02-06 13:53:10
【问题描述】:

Screenshot 1Screenshot 2 我的应用程序

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

更多详情:

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

app:layout_scrollFlags="scroll|enterAlways"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

这样当我滚动回收站视图时我的工具栏就会消失。我在网上发现 FrameLayout 没有任何行为可以让我修复 RecyclerView 在 Toolbar 下的位置,这就是为什么我改为 ViewPager + CoordinatorLayout 来管理我的片段。

但是,这带来了一些问题。我想要实现的是 - 一个带有 PagerTitleStrip 的工具栏,当我滚动工具栏时,它会消失,理想情况下会看到 PagerTitleStrip,也许它也隐藏起来了,我不太在意。但我希望我的导航抽屉继续工作,但事实并非如此。好像不存在一样。

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

布局 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,但我从来没有使用过...

【问题讨论】:

    标签: android material-design toolbar drawerlayout pagertitlestrip


    【解决方案1】:

    问题出在:

    <android.support.design.widget.CoordinatorLayout 
    
    <android.support.v4.widget.DrawerLayout
    

    DrawerLayout 应该是根布局。

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

    要添加navigation drawer,请使用interface 声明您的用户 DrawerLayout object 作为布局的根视图。在 - 的里面 DrawerLayout,添加一个包含主要内容的视图 屏幕(隐藏抽屉时的主要布局)和另一个 包含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>
    

    还有:

    但是,这带来了一些问题。我想要实现的是 - A Toolbar 附有PagerTitleStrip,当我滚动 工具栏消失,使PagerTitleStrip 理想地可见,也许 它也隐藏起来我不太在乎。但我想要我的 Navigation Drawer 继续工作,但它没有。

    检查我对此的回答:

    https://stackoverflow.com/a/35241363/4409113

    您只需将工具栏放在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),只需将其放在CollapsingToolbarLayout下方和&lt;/android.support.design.widget.AppBarLayout&gt;上方即可这个:

    </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>
    

    差不多就是这样,祝你好运。

    【讨论】:

    • 哇,非常感谢您的澄清。我阅读了更多内容并重新安排了我的 XML 布局,现在一切正常,除了一件事。我的 NavigationDrawer 现在位于工具栏的顶部,而不是像以前那样在工具栏之后立即开始。知道如何解决吗?这就是我现在嵌套事物的方式: DrawerLayout>CoordinatorLayout>AppBar>ViewPager>PagerTitleStrip
    • 我可以查看您当前的代码吗?请将它粘贴到某个地方,顺便说一句,我需要看到它,不客气;)
    • pastebin.com/hs7Q2Ap0 你有什么理由建议我在使用常规工具栏时使用 CollapsingToolbarLayout 我需要做的就是将其添加到工具栏 xml:app:layout_scrollFlags="scroll|enterAlways" 也,从我读到的 PagerTitleStrip 并不比 TabLayout 差,它只是不同,仅建议为几个标签(如 3)使用标签布局,而 PagerTitleStrip 可能有很多,比如在 Google Play 商店中......?
    • 老实说,我没有使用PagerTitleStrip 所以,(猜测)尝试使用ViewPager 上面的AppBarLayout.CollapsingToolbarLayout 只是一个测试,看看它是如何应该是。因为TabLayoutSupport Library 一起来
    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多