到目前为止,我只是一名iPhone开发人员,现在我决定给Android一个旋转.我在Android上无法弄清楚的是如何以编程方式阻止滚动WebView
?
类似于iPhone预防onTouchMove
活动的东西会很棒!
这是我在webview中禁用所有滚动的代码:
// disable scroll on touch webview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return (event.getAction() == MotionEvent.ACTION_MOVE); } });
仅隐藏滚动条,但不禁用滚动:
WebView.setVerticalScrollBarEnabled(false); WebView.setHorizontalScrollBarEnabled(false);
或者您可以尝试使用单列布局,但这仅适用于简单页面并禁用水平滚动:
//Only disabled the horizontal scrolling: webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
您还可以尝试使用垂直滚动滚动视图包装 Webview并禁用webview上的所有滚动:
并设置
webview.setScrollContainer(false);
不要忘记添加webview.setOnTouchListener(...)
上面的代码以禁用webview中的所有滚动.垂直ScrollView将允许滚动WebView的内容.
我不知道你是否仍然需要它,但这是解决方案:
appView = (WebView) findViewById(R.id.appView); appView.setVerticalScrollBarEnabled(false); appView.setHorizontalScrollBarEnabled(false);
制作WebView
忽略运动事件是错误的方法.如果WebView
需要了解这些事件怎么办?
而是子类化WebView
并覆盖非私有滚动方法.
public class NoScrollWebView extends WebView { ... @Override public boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { return false; } @Override public void scrollTo(int x, int y) { // Do nothing } @Override public void computeScroll() { // Do nothing } }
如果你看看来源为WebView
你可以看到,onTouchEvent
调用doDrag
它调用overScrollBy.
如果您的内容正确包装,则向主体添加边距详细信息将阻止滚动,如下所示:
足够简单,代码少+ bug开销:)
在WebView上设置一个监听器:
webView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return(event.getAction() == MotionEvent.ACTION_MOVE)); } });
我还没有尝试过,因为我还没有遇到这个问题,但也许你可能会过度使用onScroll功能?
@Override public void scrollTo(int x, int y){ super.scrollTo(0,y); }