android问题的滚动视图内滚动视图

我有一个滚动视图内的滚动视图。 XML是这样的

<RelativeLayout .... <ScrollView..... <RelativeLayout .... <Button..... <Button .... <ScrollView <RelativeLayout .... .......... </RelativeLayout> </ScrollView> </RelativeLayout> </ScrollView> </RelativeLayout> 

在这第二个滚动视图中没有顺利滚动。 可以给出一个解决scheme。 我尝试了很多在互联网上给出的解决scheme,但不工作。

Solutions Collecting From Web of "android问题的滚动视图内滚动视图"

试试这个代码。 它为我工作

  parentScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); return false; } }); childScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of // child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } });` 

不同的解决scheme是使用这个类作为父类

 public class NoInterceptScrollView extends ScrollView { public NoInterceptScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; } } 

我不得不提高Deepthi的解决scheme,因为它不适合我。 我猜是因为我的孩子滚动视图充满了意见(我的意思是子视图使用所有的scrollview绘图空间)。 为了使其function完整,我还必须禁止在子滚动视图内触摸所有子视图时的父滚动触摸请求:

 parentScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); return false; } }); childScrollView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of // child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } });` childScrollviewRecursiveLoopChildren(parentScrollView, childScrollView); public void childScrollviewRecursiveLoopChildren(final ScrollView parentScrollView, View parent) { for (int i = ((ViewGroup) parent).getChildCount() - 1; i >= 0; i--) { final View child = ((ViewGroup) parent).getChildAt(i); if (child instanceof ViewGroup) { childScrollviewRecursiveLoopChildren(parentScrollView, (ViewGroup) child); } else { child.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // Disallow the touch request for parent scroll on touch of // child view parentScrollView.requestDisallowInterceptTouchEvent(true); return false; } }); } } }