Alec's blog

唯纯粹与热爱不可辜负

0%

ScrollView嵌套EditText滑动冲突解决

情景

EditText 文字高度 高于 控件高度 时,正常来说是可以上下滚动EditText中的文字的。
当Edittext嵌套ScrollView在里面时发现无法滚动文字。

原因

查看源码发现ScrollView会拦截滑动事件,致使事件无法传递到EditText。

1
2
3
4
5
6
7
8
public boolean onInterceptTouchEvent(MotionEvent ev) {

final int action = ev.getAction();
if ((action == MotionEvent.ACTION_MOVE) && mIsBeingDragged) {
return true;
}
...
}

解决方法

写一个View继承于Edittext请求父布局不要拦截事件。

1
2
3
4
5
6
7
class MyEditText: androidx.appcompat.widget.AppCompatEditText {
...
override fun dispatchTouchEvent(event: MotionEvent?): Boolean {
parent.requestDisallowInterceptTouchEvent(true)
return super.dispatchTouchEvent(event)
}
}