问题描述
我在CoordinatorLayout中有一个NestedScrollView,它包含一个recyclerView.整个片段很长,没有滚动动量,我不确定该如何解决.我以前在更高版本的Android上遇到了这个问题,并且能够加入
I have a NestedScrollView within a CoordinatorLayout and it contains a recyclerView. The whole fragment, which is very long, has no scroll momentum and I'm not sure what I can do to fix it. I previously had this problem with higher Android versions and was able to include
android:nestedScrollingEnabled="false"
解决我的问题.但是,它是在api 21中添加的,而我的项目支持19+.对于api 19设备,我的应用程序在此片段上仍然没有动能.
to solve my problem. However, that was added in api 21 and my project supports 19+. My app still has no momentum on this fragment for api 19 devices.
下面是我的xml:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@color/primary_color"
android:fitsSystemWindows="true">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior">
<android.support.percent.PercentRelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false">
<ImageView
android:id="@+id/logo"
android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/profile_margin_medium_huge"
android:layout_marginBottom="46dp"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_alignParentEnd="true"/>
<TypefaceTextView
android:id="@+id/textview_title"
android:layout_below="@id/logo"
android:text="@string/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/myStyle"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="16dp"
android:layout_alignParentLeft="true"/>
<TypefaceTextView
android:id="@+id/textview_byline"
android:text="@string/byline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/myStyle"
android:layout_below="@id/textview_title"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="40dp"/>
<RadioGroup
android:id="@+id/radiogroup_filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_below="@id/textview_byline"
android:layout_alignParentRight="true"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="@dimen/activity_vertical_margin">
<TypefaceRadioButton
android:id="@+id/button_filter_new"
android:text="@string/filter_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/buttonStyleRadio"
android:theme="@style/ButtonSecondary"
android:button="@null"/>
<TypefaceRadioButton
android:id="@+id/button_filter_history"
android:text="@string/filter_history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/ButtonStyleRadio"
android:theme="@style/ButtonSecondary"
android:layout_alignParentRight="true"
android:button="@null"/>
</RadioGroup>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:nestedScrollingEnabled="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/radiogroup_filter"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginBottom="50dp"/>
<android.support.percent.PercentRelativeLayout
android:id="@+id/container_links"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/recyclerview"
android:visibility="gone">
<ImageView
android:id="@+id/image_link_1"
app:layout_widthPercent="100%"
app:layout_aspectRatio="158%"
android:scaleType="centerCrop"
android:layout_alignParentTop="true"/>
<TypefaceTextView
android:id="@+id/text_link_1"
android:text="@string/text_1"
app:layout_widthPercent="100%"
app:layout_aspectRatio="158%"
android:gravity="bottom|left"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="32dp"
android:paddingBottom="32dp"
style="@style/myStyle"
android:layout_alignParentTop="true"/>
<ImageView
android:id="@+id/image_link_2"
app:layout_widthPercent="100%"
app:layout_aspectRatio="158%"
android:scaleType="centerCrop"
android:layout_below="@id/image_link_1"/>
<TypefaceTextView
android:id="@+id/text_link_2"
android:text="@string/text_2"
app:layout_widthPercent="100%"
app:layout_aspectRatio="158%"
android:gravity="bottom|right"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="32dp"
android:paddingBottom="32dp"
android:layout_below="@id/image_link_1"
style="@style/myStyle"/>
</android.support.percent.PercentRelativeLayout>
</android.support.percent.PercentRelativeLayout>
</android.support.v4.widget.NestedScrollView>
推荐答案
我能够在测试项目中重新创建您的症状.我已将其固定在活动的onCreate()中添加以下代码:
I was able to recreate your symptoms in my test project. I fixed it be adding the following code in onCreate() for the activity:
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
recyclerView.setOnFlingListener(new RecyclerView.OnFlingListener() {
@Override
public boolean onFling(int velocityX, int velocityY) {
recyclerView.dispatchNestedFling(velocityX, velocityY, false);
return false;
}
});
我在RecyclerView中添加了一个监听器,在onFling()中,我调用dispatchNestedFling()来让父母知道正在发生监听器.父母然后可以食用该逃逸或观察孩子的逃逸.
I added a fling listener to the RecyclerView, and in onFling(), I call dispatchNestedFling() to let the parent know that a fling is occurring. The parent can then consume the fling or observe the child fling.
在22.1.0版本中添加 布尔dispatchNestedFling(浮动速度X, 浮起速度Y, 布尔型))将文件发送给嵌套的滚动父级.
added in version 22.1.0 boolean dispatchNestedFling (float velocityX, float velocityY, boolean consumed) Dispatch a fling to a nested scrolling parent.
此方法应用于指示嵌套的滚动子级 已检测到适合逃跑的条件.通常这意味着 触摸滚动已以方向上的速度结束 沿a达到或超过最小跳跃速度的滚动 可滚动的轴.
This method should be used to indicate that a nested scrolling child has detected suitable conditions for a fling. Generally this means that a touch scroll has ended with a velocity in the direction of scrolling that meets or exceeds the minimum fling velocity along a scrollable axis.
如果嵌套滚动子视图通常正常运行,但位于 自身内容的边缘,它可以使用此方法委派猛击 改为嵌套的滚动父级.父母可以选择 食用猛禽或观察儿童猛禽.
If a nested scrolling child view would normally fling but it is at the edge of its own content, it can use this method to delegate the fling to its nested scrolling parent instead. The parent may optionally consume the fling or observe a child fling.
这正在运行我的运行API 19的仿真器上进行.很明显,YMMV.
This is working on my emulator running API 19. Obviously, YMMV.
这篇关于API 19 Scrollview没有动力的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!