3

我的应用程序的屏幕截图 1屏幕截图 2

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

更多详情:

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

app:layout_scrollFlags="scroll|enterAlways"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

这样当我滚动回收站视图时我的工具栏就会消失。我在网上发现 FrameLayout 没有任何行为可以让我修复工具栏下方的 recyclerView 的位置,这就是为什么我改为 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,但我从来没有使用过它......我现在想可能使用 ViewPagerTitle,我猜这将我限制为片段的 ViewPager。

4

1 回答 1

2

问题出在:

<android.support.design.widget.CoordinatorLayout 

<android.support.v4.widget.DrawerLayout

哪个DrawerLayout应该是根布局。

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

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

并且:

然而,这带来了一些问题。我想要实现的是 - Toolbar带有PagerTitleStrip附加的 A,当我滚动工具栏时,它会消失,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和上面</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>

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

于 2016-02-06T22:28:29.833 回答