EditText和ScrollView的滚动冲突
2021-01-29 本文已影响0人
为自己代颜_
EditText外层嵌套ScrollView的时候会产生冲突,导致输入内容无法滑动
直接上代码Kotlin:et_note_detail_write_content为内容输入控件
et_note_detail_write_content.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
//触摸的是EditText并且当前EditText可以滚动则将事件交给EditText处理;否则将事件交由其父类处理
if ((v?.id == R.id.et_note_detail_write_content && canVerticalScroll(
et_note_detail_write_content
))
) {
v.parent.requestDisallowInterceptTouchEvent(true)
if (event?.getAction() == MotionEvent.ACTION_UP) {
v.parent.requestDisallowInterceptTouchEvent(false)
}
}
return false
}
})
计算高度的方法:
/**
* EditText竖直方向是否可以滚动
* @param editText 需要判断的EditText
* @return true:可以滚动 false:不可以滚动
*/
private fun canVerticalScroll(editText: ClearEditText): Boolean {
//滚动的距离
var scrollY = editText.scrollY
//控件内容的总高度
var scrollRange = editText.layout.height
//控件实际显示的高度
var scrollExtent =
editText.height - editText.compoundPaddingTop - editText.compoundPaddingBottom;
//控件内容总高度与实际显示高度的差值
var scrollDifference = scrollRange - scrollExtent
if (scrollDifference == 0) {
return false
}
return (scrollY > 0) || (scrollY < scrollDifference - 1)
}