【问题标题】:Scrolling issue with CollapsingToolbar, Parallax Image and ViewPagerCollapsingToolbar、Parallax Image 和 ViewPager 的滚动问题
【发布时间】:2015-08-18 04:02:10
【问题描述】:

我一直在努力寻找这个问题的有效答案,似乎我正在解决设计库中的一个错误,或者没有我想要做的答案。

我有一个带有视差图像的 CollapsingToolbar 和下面的 ViewPager。 ViewPager 只会作用于水平滚动,而底部的黑框是一个 TextView,它将进行垂直滚动并折叠 Toolbar。

我的解决方案现在不是很好,原因有几个 - 这里有一个 VIDEO 来说明原因。

  1. 在 API22(大概是 21)上,我的 TitleBar 下方有一个阴影,这破坏了与下面 TabLayout 的连续性。

  2. 我的 ViewPager 只能水平翻页。它还需要接受垂直输入并折叠工具栏。

  3. 我有一个 TextView,它垂直分页,折叠 ToolBar。所以它确实有效,只是不能作为仅使用 ViewPager 的多合一解决方案。

为什么 ViewPager 不能处理水平和垂直滚动是我无法理解的。也许设计库中尚不存在该功能,并且没有解决方法。我什么都试过了,到处找。这是我能做的最好的:

    <android.support.design.widget.CoordinatorLayout
    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"
    tools:context=".MainActivity"

    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout

    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/app_bar_height"
    android:fitsSystemWindows="true"
    android:theme="@style/AppTheme">

    <android.support.design.widget.CollapsingToolbarLayout

    android:id="@+id/collapsing_toolbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:fitsSystemWindows="true"
    app:expandedTitleMarginEnd="64dp"
    app:expandedTitleMarginStart="48dp"
    app:contentScrim="?attr/colorPrimary"
    app:layout_scrollFlags="scroll|exitUntilCollapsed">

    <ImageView

        android:id="@+id/backdrop"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/md_white_1000"
        android:scaleType="fitCenter"
        android:src="@drawable/backdrop"
        app:layout_collapseMode="parallax"
        app:layout_collapseParallaxMultiplier="0.7"/>

        <android.support.v7.widget.Toolbar

        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_collapseMode="pin"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

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

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

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    style="@style/CustomTabs"/>

    <android.support.v4.view.ViewPager

    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/viewpager_padding_default"/>

    </LinearLayout>

    <android.support.v4.widget.NestedScrollView

    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/drawer_padding_default"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <TextView

    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:padding="@dimen/drawer_padding_default"
    android:textColor="@color/textColorPrimary"
    android:background="@drawable/myrect" />

    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton

    android:id="@+id/fab_action"
    android:src="@mipmap/ic_action_help"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/drawer_padding_default"
    android:scaleType="center"
    app:borderWidth="0dp"
    app:layout_anchor="@id/main_content"
    app:layout_anchorGravity="bottom|right|end"/>

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

【问题讨论】:

  • 你能简单解释一下什么不起作用。
  • 视频底部的黑框是@+id/TextView。您可以在此视图上使用垂直滚动移动折叠工具栏。然而,ViewPager 只能水平滚动。我希望 ViewPager 也能够折叠工具栏并删除 TextView,因为我不需要它。它现在就在那里,因为这是我可以垂直滚动的唯一方式。基本上我不明白为什么 ViewPager 不会折叠工具栏。
  • 只需从Toolbar 中删除app:layout_collapseMode="pin"
  • 这无助于解决我遇到的问题。我确实希望工具栏也保持固定。问题是 ViewPager 似乎忽略了垂直滚动。我知道垂直滚动有效,因为 TextView 能够触发折叠。我不知道的是为什么 ViewPager 也不会触发垂直滚动。那里的例子很少,有些人建议在 AppBar 之前使用 ViewPager,其他人包括在 CollapsingToolbar 内使用 TabLayout,但它们都没有让我更接近我想要实现的目标。也许我的 XML 订单不好?我不知道。
  • 我想我找到了问题的答案。我将 ViewPager 嵌套在 NestedScrollView 中。我需要将片段本身嵌套在 NestedScrollView 中。

标签: android android-viewpager toolbar


【解决方案1】:

1) 为 viewPager 片段创建一个单独的布局,使用 NestedScrollView 作为你的根,并添加 app:layout_behavior="@string/appbar_scrolling_view_behavior", 到它。

2) 将 app:layout_behavior="@string/appbar_scrolling_view_behavior" 添加到 viewPager

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多