Android - 如何禁用ScrollView和所有孩子

HeM*_*odd 2 android scrollview

  • 编辑清楚

我觉得这个问题已经有了答案,但我找不到答案.

我的布局中有一个ScrollView,它包含各种可点击的视图.

在特定条件下,我想禁用ScrollView及其所有子项的点击和事件.

以下没有帮助:

ScrollView.setEnabled(false)
ScrollView.setClickable(false)
ScrollView.setOnTouchListener(null)
Run Code Online (Sandbox Code Playgroud)

以及:

(parent view of the ScrollView).requestDisallowInterceptTouchEvent()
Run Code Online (Sandbox Code Playgroud)

我用以下代码创建了一个自定义ScrollView:

public class StoppableScrollView extends ScrollView
{
    private static boolean stopped = false;

    public StoppableScrollView(Context context)
    {
        super(context);
    }

    public StoppableScrollView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        if(stopped)
        {
            return true;
        }
        else
        {
            super.onInterceptTouchEvent(ev);
            return false;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev)
    {
        if(stopped)
        {
            return true;
        }
        else
        {
            super.onTouchEvent(ev);
            return false;
        }
    }

    public static void setStopped(boolean inBool)
    {
        stopped = inBool;
    }

    public static boolean getStopped()
    {
        return stopped;
    }
}
Run Code Online (Sandbox Code Playgroud)

仅使用onTouchEvent()将停止滚动,但不会单击子视图.

仅使用onInterceptTouchEvent()使得点击工作时滚动不会,反之亦然.

同时使用onTouchEvent()和onInterceptTouchEvent()可以在停止时为'true'成功停止对子视图的不必要点击,但无论停止状态如何,它都会禁用滚动.

有没有更简单的方法来获取此行为,或者有没有办法修改StoppableScrollView类,以便它将正确处理这些触摸事件?

and*_*vid 5

可能应该帮助的是以下(因为我有类似的问题):

在ScrollView中,您应该将RelativeLayout作为主子进程(ScrollView无论如何只接受1个主子进程).这个RelativeLayout当然应该是两个方向上的fill_parent.

在真正结束的RelativeLayout(所有其他的孩子后),你可以把现在用透明背景(#00FFFFFF),这也FILL_PARENT在两个方向上的LinearLayout.此LinearLayout应具有Visibility = View.GONE(默认情况下)您还必须将空的OnClickListener附加到它.现在,因为zOrder如果你使这个LinearLayout Visibility = View.Visible它将捕获所有事件并避免点击上面的孩子!