ScrollView内嵌EditText滚动事件冲突处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ScrollView内嵌EditText滚动事件冲突处理相关的知识,希望对你有一定的参考价值。
开门见山!如果EditText内容过长,但控件高度有限的时候,在滑动内容的时候就会有滑动冲突了,处理方式是要先判断EditText内容是否过长,即可滚动时,设置父容器(即ScrollView)分发事件为关闭状态,否则为打开状态。附上相关代码:
判断EditText内容是否过长可滚动:
public static boolean canVerticalScroll(EditText editText) { // 滚动的距离 int scrollY = editText.getScrollY(); // 控件内容的总高度 int scrollRange = editText.getLayout().getHeight(); // 控件实际显示的高度 int scrollExtent = editText.getHeight() - editText.getCompoundPaddingTop() - editText.getCompoundPaddingBottom(); // 控件内容总高度与实际显示高度的差值 int scrollDifference = scrollRange - scrollExtent; if(scrollDifference == 0) { return false; } return (scrollY > 0) || (scrollY < scrollDifference - 1); }
假设你的EditText叫testEditText:
testEditText.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { //触摸的是EditText并且当前EditText可以滚动则将事件交给EditText处理;否则将事件交由其父类处理 if ((v == docTriageEditText && canVerticalScroll(testEditText))) { v.getParent().requestDisallowInterceptTouchEvent(true); if (event.getAction() == MotionEvent.ACTION_UP) { v.getParent().requestDisallowInterceptTouchEvent(false); } } return false; } });
本文出自 “旦旦家园” 博客,请务必保留此出处http://250215260.blog.51cto.com/9014988/1926007
以上是关于ScrollView内嵌EditText滚动事件冲突处理的主要内容,如果未能解决你的问题,请参考以下文章
在 ScrollView 中的 EditText 内滚动 [重复]
关于 ScrollView 中嵌套 EditText,输入多行会使整体滚动的问题
ScrollView中存在EditText,焦点变化引发自动滚动问题
Android Nougat 中的 ScrollView 在输入 EditText 时一直滚动到顶部,但在 Lollipop 中有效