问题一:ScrollView嵌套RecycleView导致的滑动不流畅问题
这种情况是他们两个都是滚动布局,相互抢焦导致,这种场景我们其实是不需要RecycleView滚动的,让RecycleView计算好高度完整显示,然后禁用掉RecycleView的滚动就好,方法如下:
给RecycleView设置android:nestedScrollingEnabled="false"即可。
问题二:ScrollView嵌套RecycleView导致打开界面显示的不是布局的顶部
这种情况是RecycleView抢夺到焦点,导致打开界面定位到RecycleView的位置。
解决方案有两种:
1.禁止RecyclerView获取到焦点,对应方法如下:
recycleView.setFocusable(false);
2.让ScrollView主动获取到焦点
<ScrollView
android:focusable="true"
android:focusableInTouchMode="true"
....
或者代码设置:
scrollView.setFocusable(true);
scrollView.setFocusableInTouchMode(true);
为题三:ScrollView中包含Editext导致跳转后回到界面时定位到光标所在Editext位置
这种情况是Editext抢到焦点所致,考虑到一个界面包含多个edittext的情况,我们可以对ScrollView进行操作,方法如下:
mDataBinding.scrollView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); //强制scrollView获取焦点 mDataBinding.scrollView.setFocusable(true); mDataBinding.scrollView.setFocusableInTouchMode(true); mDataBinding.scrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //每次都在onTouch时抢回焦点 v.requestFocusFromTouch(); return false; } });
目前汇总以上相关问题,做个记录,若遇到新问题再更新。