EditText和ScrollView的滾動衝突

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)
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章