最近做一个资讯界面,采用的组合式[ScrollView[WebView+ListView]]的形式,这种实现方式,可以灵活的满足,资讯内容为网页H5,评论列表为原生的形式。
但是一开始就一直有一个问题困扰着我们,就是当使用了这种组合之后,仿佛WebView就不知道如何去加载图片了,每次就留个空白在那边。
在网上找了N种方法,没一个说到点子上的,也可能是那些方法并不针对这个问题。自己通过分析之后,发现了自己的解决方案,可以完美解决这种情况。
说到底,为什么图片不去加载,是因为上层的ScrollView将所有的触摸事件都消化了,导致WebView看起来是可以滑动的,其实是假的滑动,真实的是上层的ScrollView在滑动。
找便WebView的源码,发现下面一行代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
return mProvider.getViewDelegate().onTouchEvent(event);
}
我猜让这个方法激活是解决这个问题的关键,后面的试验也证实了我的想法。
起初我走了个弯子,想通过WebView的对象,获取到mProvider
对象,后来发现这个方法不可行,见源码:
/**
* Gets the WebViewProvider. Used by providers to obtain the underlying
* implementation, e.g. when the appliction responds to
* WebViewClient.onCreateWindow() request.
*
* @hide WebViewProvider is not public API.
*/
@SystemApi
public WebViewProvider getWebViewProvider() {
return mProvider;
}
这玩意是个系统api,不是公开的。
思路一转,有了下面的尝试:
scoll_view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.e(TAG, "pull_to_refresh_view====>onTouch");
webView.onTouchEvent(event);
return false;
}
});
对的,就是上面这几行代码,完美的让WebView的onTouchEvent重新激活,从而让它再次知道自己何时要加载图片标签啦。
问题解决,赶紧记录一下~~~