Tim*_*eed 13 android android-recyclerview androiddesignsupport bottom-sheet
我有一个RecyclerView使用LinearLayoutManager与HORIZONTAL方向,嵌套在FrameLayout使用BottomSheet Behavior.
当尝试垂直拖动时RecyclerView,BottomSheet不会响应拖动事件.据推测这是因为对于LayoutManager具有水平方向的垂直滚动被禁用.
我已经尝试重写LinearLayoutManager.canScrollVertically()并返回true.这种形式的作品.如果你在一个非常谨慎的方式垂直拖动时,BottomSheet会作出回应.然而,只要涉及任何水平移动,BottomSheet停止响应垂直拖动事件.
我不确定覆盖canScrollVertically()是否是正确的方法 - 从用户体验的角度来看,它肯定是不对的.
我还注意到,如果我使用的是水平方向ViewPager而不是RecyclerView水平方向LayoutManager,则会BottomSheet根据需要响应垂直滑动事件.
是否有一些其他的方法LayoutManager,RecyclerView,BottomSheet Behavior,或者干脆东西,可以帮助传播到垂直滚动的事件BottomSheet Behavior?
这里有一个问题的例子:
https://github.com/timusus/bottomsheet-test (问题可以通过提交#f59a7031转载)
只需展开第一个底页.
R. *_*ski 24
问题出在哪里?在FrameLayout.BottomSheet放在里面时效果很好CoordinatorLayout.然后BottomSheet可以将它的滚动状态传递CoordinatorLayout给作为直接子项的其他视图CoordinatorLayout.
为什么RecyclerView无法将滚动状态传递给BottomSheet?它不是直接的孩子CoordinatorLayout.但是存在一种传递它们的方法:RecyclerView必须放在实现NestedScrollingParent和实现的视图中NestedScrollingChild.答案是:NestedScrollView
所以你的fragment_sheetX.xml布局应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical"
android:fillViewport="true">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
android:fillViewport="true"另请注意,您RecyclerView不会占据整个高度.
但它仍然无法正常工作.为什么?RecyclerView必须告诉他们将垂直滚动传递给父级.怎么样?答案是recyclerView.setNestedScrollingEnabled(false);,但这里有更好的描述.
顺便说一句:MultiSheetView对移动用户体验设计来说,这是一个很棒的功能和非常有趣的方法.
| 归档时间: |
|
| 查看次数: |
6058 次 |
| 最近记录: |