我在 ListView
中有一个 WebView
。一切正常,除了我无法阻止 ListView
向上/向下滚动,如果 WebView
处理滚动手势。
我知道,我可以使用 OnTouchListener 中的以下代码完全阻止 ListView
的滚动
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
webView.getParent().requestDisallowInterceptTouchEvent(false);
} else {
webView.getParent().requestDisallowInterceptTouchEvent(true);
}
}
但我只想阻止它,而 WebView
没有处理滚动/触摸手势。
例如。我有两个 HTML 页面。一个显示位置的 360 度 View 。这个 WebView
应该完全阻止父级的滚动,而第二个 WebView
只是文本。该页面不会处理触摸事件,因此父 ListView
可以滚动。
PS:HTML不是我自己写的,不能修改。
最佳答案
紧随其后的是@mars3142,下面的代码显示并允许滚动得更像浏览器中显示的网页。
public class InnerScrollWebView extends WebView {
private Boolean enableScroll = true;
public InnerScrollWebView(Context context, AttributeSet attrs){
super(context, attrs);
getSettings().setDomStorageEnabled(true);
getSettings().setJavaScriptEnabled(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
enableScroll = true;
}
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(enableScroll);
}
return super.onTouchEvent(event);
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
if (getParent() != null) {
enableScroll = false;
}
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
}
关于ListView 内的 Android WebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308184/