Android widget 禁用ScrollView操作

Android widget 禁用ScrollView操作,android-widget,scrollview,Android Widget,Scrollview,在我的应用程序中,我有一行用于增加小部件的宽度(通过向右/向左拖动该行),并且在同一活动中启用了ScrollView。我需要禁用滚动查看行动时,用户触摸线,当用户释放,它应该被启用。ScrollView应处于可见状态,但应禁用滚动视图的操作。请帮我解决这个问题。我试过这些,但都不管用 scroll.setEnabled(false); scroll.setFocusable(false); scroll.setHorizontalScrollBarEnabled(false); scrol

在我的应用程序中,我有一行用于增加小部件的宽度(通过向右/向左拖动该行),并且在同一活动中启用了
ScrollView
。我需要禁用滚动查看行动时,用户触摸线,当用户释放,它应该被启用。
ScrollView
应处于可见状态,但应禁用滚动视图的操作。请帮我解决这个问题。我试过这些,但都不管用

scroll.setEnabled(false); 
scroll.setFocusable(false); 
scroll.setHorizontalScrollBarEnabled(false); 
scroll.setVerticalScrollBarEnabled(false);

提前感谢。

这可能有点晚了,但我遇到了相同的问题,因此我的解决方案与上面类似,必须禁用OnTouchListener,如下所示:

// Get the ScrollView
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);


// Disable Scrolling by setting up an OnTouchListener to do nothing
myScroll.setOnTouchListener( new OnTouchListener(){ 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true; 
    }
});


// Enable Scrolling by removing the OnTouchListner
tvDisplayScroll.setOnTouchListener(null);    

这有点晚了,但更简单的方法是让您的家长
调用
requestDisallowWinterCeptTouchEvent(true)
。这不仅会导致直接父对象(滚动视图),还会导致可能拦截触摸的任何其他父对象在特定事件期间忽略触摸。当您有一个可拖动的子级和可拖动的父级,并且希望在拖动子级时禁用父级拖动时,这一点非常好


这也是一个比专门禁用滚动视图更通用的解决方案。如果您在其他地方重复使用可拖动的子视图,它仍然可以工作:您不需要知道滚动视图的ID。无需修改即可重复使用的代码总是好的。

如果有人使用Android L或更高版本并且覆盖onTouchonInterceptTouchEvent不起作用:
尝试覆盖启动时的
onStartNestedScroll
返回false


还有一个新的XML属性nestedScrollingEnabled,但它似乎必须位于泄漏滚动事件的视图上,而不是受泄漏影响的ScrollView上,或它们之间布局层次结构中的任何位置。因此,如果您事先不知道您可能拥有哪些子ScrollView,那么为受影响的ScrollView覆盖
onStartNestedScroll
是一个不错的选择。

。您可以通过执行
getParent().requestDisallowerWinterCeptTouchEvent(…)
在视图中使用此选项。我在ScrollView中的水平滚动库中使用了它,它工作得非常完美!奇怪的是,我有一个scrollview->linear layout->我的新控件,发现我必须实际选择scrollview来调用这个RequestDisallowWinterCeptTouchEvent(true),然后它才能停止滚动。我想医生说它会向所有家长发送此消息,但这对我不起作用。这不会导致ScrollView的孩子也无法获得触摸事件吗?此解决方案节省了我一天的时间。太好了@StackOverflow,是的,但它只适用于特定手势的持续时间,因此只要抬起手指,它就会恢复正常行为。他们的想法是,当一个手势开始时,不清楚该手势将属于哪个视图,所以他们都会处理它;一旦变得清晰,一个视图将捕获一系列运动事件,但仅在手势持续时间内捕获,其他视图将获得运动取消事件。RequestDisallowWinterCeptTouchEvent()基本上让子视图告诉父视图“这个手势是为我准备的,忽略它的其余部分…”