Android水平滚动视图禁用滚动

7

我有一个HorizontalScrollView,其中包含一个很长的视图作为其子视图,因此HorizontalScrollView是可滚动的,并且可以在水平方向上滚动其子视图。 是否有可能阻止这种滚动?我不希望用户能够滚动视图。

有没有办法禁用HorizontalScrollView的滚动?


1
滚动视图用于滚动!如果您不希望用户滚动,请选择除使用scrollView之外的其他方法。您可以使用动画代替。 - Ali Behzadian Nejad
2个回答

20

我的建议是使用一个 OnTouchListener,例如:

onCreate 方法中


HorziontalScrollView scrollView= (HorizontalScrollView)findViewById(R.id.scrollView);
scrollView.setOnTouchListener(new OnTouch());

并且具有一个类:


private class OnTouch implements OnTouchListener
{
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    return true;
    }
}

那真是救了我的一天!实际上,我花了一个小时寻找如何禁用TabLayout中的小滚动条。但我完全忘记了它是一种ScrollView!在我的情况下,这也起作用。 - Vlad E. Borovtsov
它救了我的一天。谢谢! - user7408943

2

好的,我找到了实现这个的方法。

只需要创建自己的HorizontalScrollView并重写onTouchEvent方法即可。

public class MyHSV extends HorizontalScrollView {

    public MyHSV(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

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

    public MyHSV(Context context) {
        super(context);
        init(context);
    }

    void init(Context context) {
        // remove the fading as the HSV looks better without it
        setHorizontalFadingEdgeEnabled(false);
        setVerticalFadingEdgeEnabled(false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        // Do not allow touch events.
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Do not allow touch events.
        return false;
    }

}

在 XML 文件中,然后...
<pathToClass.MyHSV xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:scrollbars="none"
    android:id="@+id/myHSV>

</pathToClass.MyHSV>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接