美文网首页程序人生
EditText和ScrollView的滚动冲突

EditText和ScrollView的滚动冲突

作者: 为自己代颜_ | 来源:发表于2021-01-29 16:01 被阅读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)
    }

相关文章

网友评论

    本文标题:EditText和ScrollView的滚动冲突

    本文链接:https://www.haomeiwen.com/subject/finqtltx.html