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)
}