唯美
一、简述
在项目开发中,有时候页面会比较长,这时候我们自然而然就想到采用ScrollView进行滑动,但这里我遇到一个小坑,因为ScrollView本身就是上下滑动效果,而像EditView有时候可能需要多行输入,那么这时候就会发现问题来了,EditView多行数据滑动不起效果,如下所示:
二、解决
明显可以看到多行情况下EditView无法滑动,导致这个原因是ScrollView的滑动事件与EditView滑动事件冲突,解决方案是在EditView的触摸事件中限制ScrollView不拦截
/**
* 设置触摸事件,由于EditView与TextView都处于ScollView中,
* 所以需要在OnTouch事件中通知父控件不拦截子控件事件
*/
private OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_MOVE){
//按下或滑动时请求父节点不拦截子节点
v.getParent().requestDisallowInterceptTouchEvent(true);
}
if(event.getAction() == MotionEvent.ACTION_UP){
//抬起时请求父节点拦截子节点
v.getParent().requestDisallowInterceptTouchEvent(false);
}
return false;
}
};
然后再设置EditView对象调用该事件即可
etContent.setOnTouchListener(touchListener);
三、滑动TextView设置
布局中可设置textView滑动的ScrollBar,具体如下:
另外在代码中还需要设置滑动调用的方法:
//textView滑动需要设置滑动方法
tvDefault.setMovementMethod(ScrollingMovementMethod.getInstance());
四、详细代码
布局文件:activity_main.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width