禁用ScrollView操作

Kis*_*hor 15 scrollview android-widget

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

scroll.setEnabled(false); 
scroll.setFocusable(false); 
scroll.setHorizontalScrollBarEnabled(false); 
scroll.setVerticalScrollBarEnabled(false);
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Era*_*IRL 49

这可能有点晚了,但我遇到了同样的问题所以我的解决方案与上面类似,不得不按如下方式禁用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);    
Run Code Online (Sandbox Code Playgroud)


Nax*_*att 37

这有点晚了,但更简单的方法就是让你的父母去ViewGroup拜访requestDisallowInterceptTouchEvent(true)它.这不仅导致直接父级(滚动视图),而且可能拦截触摸的任何其他父对象在特定事件的持续时间内忽略它.当你有一个可拖动的子AND和可拖动的父项,并且想要在拖动子项时禁用父拖动时,这很好.

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

  • 奇怪的是,我有一个scrollview->线性布局 - >我的新控件,发现在实现停止滚动效果之前,我必须实际选择scrollview来调用此requestDisallowInterceptTouchEvent(true).我认为文档说它会向所有家长发送此消息,但这对我不起作用. (3认同)