背景
我尝试添加与许多应用程序相同的功能,其中屏幕的上部区域根据滚动的内容缩小和扩大。
为此,我使用了 Google 的设计库,如CheeseSquare 示例所示。
问题
问题是,无论 NestedScrollView 中有多少内容,它都可以让我滚动到内容的最后一个视图下方,只是为了让我看到操作栏的最终状态,它本身的大小是最小的。
简而言之,这是我在滚动到底部时看到的(CheeseSquare 示例的修改内容):
虽然这是滚动到底部时我想要的(取自联系人应用程序):
我还在尝试修复ThreePhasesBottomSheet示例上的一个错误,即即使处于窥视状态,也可以在底部工作表内容中滚动。要重现,开始水平滚动(这不会做任何事情,因为没有任何东西可以这样滚动)然后垂直滚动,这会以某种方式触发底页内容的滚动。
因此,我需要在“transformView()”方法中禁用滚动,以防“翻译
这是使用正常用法时的工作方式:
这就是它在不阻止滚动的错误下的行为方式:
我试过的
我尝试使用“ layout_scrollFlags ”标志,将高度更改为 wrap_content,并删除 clipToPadding 和 fitSystemWindows 属性。
这是示例 XML 文件,我已将其修改为仅包含一个 cardView 而不是多个:
<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:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/detail_backdrop_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp">
<ImageView
android:id="@+id/backdrop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="24dp">
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/card_margin">
<LinearLayout
style="@style/Widget.CardContent"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Info"
android:textAppearance="@style/TextAppearance.AppCompat.Title" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cheese_ipsum" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@drawable/ic_discuss"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"/>
</android.support.design.widget.CoordinatorLayout>
我也尝试了下一个代码:
((AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams()).setScrollFlags(0);
但这仍然允许在CheeseSquare示例中滚动 NestedScrollView 本身,并且还允许在ThreePhasesBottomSheet示例中进行投掷。
问题
当底部没有更多内容可显示时,我该怎么做才能使滚动停止?
此外,我可以在任何时候禁用 NestedScrollView 的滚动(对于ThreePhasesBottomSheet示例)?像“setEnableScrolling(...)”这样的东西?
我试图扩展 NestedScrollView 并从 ScrollingViewBehavior 扩展,但未能找到禁用滚动的方法。
改变可能是一件非常简单的事情,但我不知道是什么......
编辑:如果需要,这是我目前用于设计和支持库的
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'
编辑:对于#2,我从 BottomSheetLayout.java 文件中找到了一种解决方法,以禁用与变量“sheetViewOwnsTouch”相关的所有内容,就好像它始终设置为“false”一样。这将允许窃取底部工作表上的触摸事件。但是,这只是一种解决方法,并且仅适用于这种情况。它还会导致一些应该由其他视图处理的触摸事件。我仍然想知道如何以编程方式阻止滚动,以及在足够空间显示内容的另一种情况下。