程序人生

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)
    }
上一篇下一篇

猜你喜欢

热点阅读