ViewPager中的ScrollView不会在Android 4.x上滚动

我的问题似乎只影响Android 4.x版本,也可能是特定于设备的(即我的华为G630@4.3上不存在,但确实存在于Samsung Ace2@4.4.4上)。 我有一个ScrollView ,其中包含一个具有4个CardViewRelativeLayout 。 现在在一些4.x设备上,当我尝试从卡片开始滚动时,滚动事件就不会发生。 如果我触摸卡之间或第一张卡之上(而不是任何两张之间 )和设备屏幕之间的小填充,我可以滚动内容。

                                          

Android 5.x和6.x没有任何问题。

编辑

似乎问题并不仅仅与CardView有关,因为我有另一种布局,即使我按自定义视图拖动屏幕也不会滚动:

                                                                         

我添加了完整的布局,这里还有一个图片用于说明(我标记了可以拖动的可滚动区域):

可滚动区域

EDIT2

也许这些布局是ViewPager中的碎片也很重要。 ViewPager是否可能阻止ScrollView (以及其中的任何其他视图)获得焦点/处理触摸事件? 我的ViewPager的代码是这样的:

  

EDIT3

似乎问题必须是ViewPager + (Nested)ScrollView (我试图用它交换普通的ScrollView ,但没有成功)。 我为Fragment创建了一个虚拟布局,它只托管父NestedScrollViewLinearLayout和许多大TextView如下所示:

    ...  

…而且滚动也不起作用! 仅在屏幕的最边缘,如前所述。 我不知道这怎么会发生……

解决了! 我有完全相同的问题。 您可能正在使用PageTransformer ViewPageranimation。

禁用

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // there are problems with this on 4.0.3, probably also on 4.1 viewPager.setPageTransformer(true, new DepthPageTransformer()); } 

你的post和研究为我节省了很多时间,谢谢。

其他解决方案

如果您喜欢animation,也可以尝试将DepthPageTransformer更改为: https ://stackoverflow.com/a/28214802/1310343c

你是对的,2个可滚动的控件相互竞争。

NestedScrollView支持库中的NestedScrollView 。 它旨在解决此类问题。

它有许多增强function,可以与其他可滚动控件一起使用,包括ViewPagerRecyclerView (只要你调用.setNestedScrolling(true) )和CoordinatorLayout

基于以上所述,我在所有实例中都使用了这个新类,滚动内的滚动function完美无缺。 我们的产品在NestedScrollView具有完美的NestedScrollView控件,其中一些嵌入了RecyclerView列表。

对我来说,这个设置有效:我有一个协调器布局,它在嵌套的scrollview下面

     

有一个viewpager,它有一个片段,它再次包含一个嵌套的scrollview

  . . .  

您的ScrollView必须具有match_parent height并且scrollview的第一个子项( LinearLayout )必须具有wrap_content高度