Bar*_*ans 169 android android-scrollview android-scroll android-recyclerview
对于我的应用程序,我使用的是一个RecyclerView内部ScrollView,其RecyclerView高度基于其内容使用此库.滚动工作正在进行,但滚动时滚动不顺畅RecyclerView.当我滚动ScrollView它自己时,它滚动顺畅.
我用来定义的代码RecyclerView:
LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));
Run Code Online (Sandbox Code Playgroud)
该RecyclerView在ScrollView:
<android.support.v7.widget.RecyclerView
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:id="@+id/friendsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
nat*_*rio 365
尝试做:
RecyclerView v = (RecyclerView) findViewById(...);
v.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用支持设计库修改布局.我猜你当前的布局是这样的:
<ScrollView >
<LinearLayout >
<View > <!-- upper content -->
<RecyclerView > <!-- with custom layoutmanager -->
</LinearLayout >
</ScrollView >
Run Code Online (Sandbox Code Playgroud)
您可以将其修改为:
<CoordinatorLayout >
<AppBarLayout >
<CollapsingToolbarLayout >
<!-- with your content, and layout_scrollFlags="scroll" -->
</CollapsingToolbarLayout >
</AppBarLayout >
<RecyclerView > <!-- with standard layoutManager -->
</CoordinatorLayout >
Run Code Online (Sandbox Code Playgroud)
但是,这是一个较长的路要走,如果您对自定义线性布局管理器没问题,那么只需在回收器视图上禁用嵌套滚动.
v 23.2现在,支持库的发布包括所有默认LayoutManagers中的工厂"包装内容"功能.我没有测试它,但你应该更喜欢它你正在使用的库.
<ScrollView >
<LinearLayout >
<View > <!-- upper content -->
<RecyclerView > <!-- with wrap_content -->
</LinearLayout >
</ScrollView >
Run Code Online (Sandbox Code Playgroud)
Vic*_*sto 76
我只需要使用它:
mMyRecyclerView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
在我的onCreateView()方法.
非常感谢!
iDe*_*per 26
您可以使用以下方式:
将此行添加到recyclerView xml:
android:nestedScrollingEnabled="false"
Run Code Online (Sandbox Code Playgroud)
或者在java代码中:
RecyclerView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
希望这有帮助.
小智 11
您可以尝试使用XML和编程方式.但是,您可能遇到的问题(在API 21之下)通过XML执行它将无法正常工作.所以最好在Activity/Fragment中以编程方式设置它.
XML代码:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="match_parent"
android:visibility="gone"
android:nestedScrollingEnabled="false"
android:layout_height="wrap_content"
android:layout_below="@+id/linearLayoutBottomText" />
Run Code Online (Sandbox Code Playgroud)
编程方式:
recycleView = (RecyclerView) findViewById(R.id.recycleView);
recycleView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
使用嵌套滚动视图而不是滚动视图解决了我的问题
<LinearLayout> <!--Main Layout -->
<android.support.v4.widget.NestedScrollView>
<LinearLayout > <!--Nested Scoll View enclosing Layout -->`
<View > <!-- upper content -->
<RecyclerView >
</LinearLayout >
</android.support.v4.widget.NestedScrollView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了类似的问题(我试图创建一个嵌套的RecyclerViews之类的东西,例如Google PlayStore设计)。解决此问题的最佳方法是将子类RecyclerViews子类化,并覆盖“ onInterceptTouchEvent”和“ onTouchEvent”方法。这样,您可以完全控制这些事件的行为方式以及最终滚动的方式。
这里每个答案都是一样的。我已经使用了大家建议的内容。然后我发现 NestedScrollView 比 ScrollView 更快,所以
使用
<androidx.core.widget.NestedScrollView
Run Code Online (Sandbox Code Playgroud)
代替
<ScrollView
Run Code Online (Sandbox Code Playgroud)
并像往常一样使用它
recycleView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
88681 次 |
| 最近记录: |