项目集成了AndroidX后,修改了轮播图,自定义viewpager2,使用时发现在部分手机上viewpager2滚动导致页面自动滑动到顶部问题。
由于以前遇到过自定义viewpager轮播图焦点问题引起类似bug,但是哪个只是略微有点偏移,并不会引起滚动,不过首先尝试了使用去焦点,setfacus...等一系列方法,失败...
经过反复查找查找到一个属性应该可以使用android:descendantFocusability
这个属性有三个值可以使用
beforeDescendants:父布局会优先子布局获取焦点
afterDescendants: 只有当子布局不需要获取焦点时,父布局才会获取焦点
blocksDescendants:覆盖子布局直接由父布局获取焦点
最终选择以代码形式mViewPager2.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
成功解决该问题,下面是几个属性的翻译
/ * *
*这个视图会在它的任何后代视图之前得到焦点。
* /
public static final int FOCUS_BEFORE_DESCENDANTS = 0x20000;
/ * *
*只有当没有后代想要它时,这个视图才会得到焦点。
* /
public static final int FOCUS_AFTER_DESCENDANTS = 0x40000;
/ * *
*这个视图甚至会阻止它的后代获得焦点
*如果他们是可聚焦的。
* /
public static final int FOCUS_BLOCK_DESCENDANTS = 0x60000;