使用场景
editText内容有多高显示多高,禁止滑动,由scrollView提供滑动功能,内部同时嵌套了禁止滑动的图片列表。
问题描述
在铺满一个屏幕的editText中,粘贴一段文本,然后点击软键盘的删除键,scrollView滚动到控件最上方,通过监听scrollView滚动,发现是发生了多段滚动,最后滚动到最上方。但是光标位置仍在粘贴文本末尾,再点击一次删除键,scrollView滚动到正确位置,恢复正常。
解决
起初选用了重写scrollView的computeScroll方法,直接空白,但是粘贴文本的滚动操作无法执行,这个方法太过于理想化。后面认为是scrollView和editText的焦点问题,然后重写了scrollView的fling和getFocusables方法,在发生滚动前,焦点清除,fling方法执行后返回super方法,也无效。
临时方案
在监听文本变化的函数afterTextChanged中,代码手动执行一遍scrollView的smoothScrollto(0, scrollView.getScrollY()),测试反馈正常,但是应该不是最优解。
具体原因需要抽时间重新看一下。。