最近在项目中遇到一个问题,就是当scrollview中包含多个edittext,在滑动页面的时候,有时候不太灵活,在网上各种扒拉,借鉴别人的方式实现了一种解决办法:
重写Edittext
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (editScroll(this)) {
getParent().requestDisallowInterceptTouchEvent(true);
if (ev.getAction() == MotionEvent.ACTION_UP) {
getParent().requestDisallowInterceptTouchEvent(false);
}
}
return super.dispatchTouchEvent(ev);
}
/**
* EditText竖直方向能否够滚动
*false:不能够滚动
* true:能够滚动
*/
private boolean editScroll(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);
}
}