我有一个嵌入在滚动视图中的 Webview。Webview 本身具有可垂直滚动的区域。
现在,如果我尝试在 webview 内滚动,scrollview 会拦截 touchevent 并滚动整个 webview,而不是只移动小的可滚动 div。
仅当 webview 不想滚动时,如何才能使滚动视图工作?
我有一个嵌入在滚动视图中的 Webview。Webview 本身具有可垂直滚动的区域。
现在,如果我尝试在 webview 内滚动,scrollview 会拦截 touchevent 并滚动整个 webview,而不是只移动小的可滚动 div。
仅当 webview 不想滚动时,如何才能使滚动视图工作?
@Janusz,我遇到了同样的问题。我的解决方案是基于扩展的滚动视图行为以及正确的布局。我在这里写了同一个问题的答案。如果您有实施问题或疑问,请告诉我,请告知是否有帮助:)
就我而言,我在滚动视图容器中有一个 webview,并且滚动视图和 webview 是全屏的。我可以通过覆盖 webView touchListener 中的 onTouch 事件来解决这个问题。
scrollView = (ScrollView)findViewById(R.id.scrollview);
webView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
scrollView.requestDisallowInterceptTouchEvent(true);
return false;
}
}
使用 TouchyWebView.java
public class TouchyWebView extends WebView {
public TouchyWebView(Context context) {
super(context);
}
public TouchyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchyWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent event){
requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(event);
}
}
在布局文件中:
<yourclasapath.TouchyWebView
android:id="@+id/description_web"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
我们的解决方案通过Javascript 接口使用 Javascript 回调。每次触摸 WebView 内可滚动的 UI 的一部分时,都会通过 java 脚本调用一个侦听器,该侦听器在 WebViews 父级上调用requestDisallowInterceptTouchEvent。
这不是最优的,而是目前找到的最好的解决方案。如果用户滚动得非常快,则 WebView 中的图层将不会滚动,但以正常的滚动速率可以正常工作。