ScrollView嵌套ViewPager,左右翻页时ScrollView向上滚动

记录一次工作中遇到的异常交互问题。

UI层级结构如下:

ScrollView嵌套ViewPager,而ViewPager中子页面放的是GridView。

ViewPager左右翻页时,导致ScrollView向上滚动的原因是:

1. ViewPager左右翻会触发ScrollView的onLayout方法

2. 而ViewPager.onLayout的方法中会检测是否有子View获取焦点,有的话,会自动滚动以便显示出子View。这就是导致问题的原因。代码是在ViewPager.onLayout中。如下:

super.onLayout(changed, l, t, r, b);
mIsLayoutDirty = false;
// Give a child focus if it needs it
if (mChildToScrollTo != null && isViewDescendantOf(mChildToScrollTo, this)) {
    scrollToDescendant(mChildToScrollTo);
}
mChildToScrollTo = null;

3. 解决办法就是让子View不再默认获取焦点。

mGridView.setFocusable(false);
mGridView.setFocusableInTouchMode(false);
发布了348 篇原创文章 · 获赞 8 · 访问量 74万+

猜你喜欢

转载自blog.csdn.net/logan676/article/details/103987028
今日推荐