问题背景
一个长页面内有ScrollView,也有EditText,EditText有焦点时,跳转到其他页面操完跳回当前页面,此时页面内容自动滚动到EditText所在的位置,用户体验非常不好。
问题分析
参考:https://www.jianshu.com/p/192f160f9e60
private void scrollToChild(View child) {
child.getDrawingRect(mTempRect);
/* Offset from child's local coordinates to ScrollView coordinates */
offsetDescendantRectToMyCoords(child, mTempRect);
int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);
if (scrollDelta != 0) {
scrollBy(0, scrollDelta);
}
}
ScrollView的自滚动方法中基本都是通过调用computeScrollDeltaToGetChildRectOnScreen
方法。
如果该方法返回值为0,则不滚动。
解决办法
自定义ScrollView,重写ScrollView的computeScrollDeltaToGetChildRectOnScreen
方法,将返回值设为0。
public class NoScrollFocusScrollView extends ScrollView {
public NoScrollFocusScrollView(Context context) {
super(context);
}
public NoScrollFocusScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoScrollFocusScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected int computeScrollDeltaToGetChildRectOnScreen(Rect rect) {
return 0;
}
}
暂无评论