1.webview加载网页中图片过大,处理
【1.在ondestroy()方法中释放资源
private void destroyWebView(WebView webView){
if( webView!=null) {
// 如果先调用destroy()方法,则会命中if (isDestroyed()) return;这一行代码,需要先onDetachedFromWindow(),再
// destory()
ViewParent parent = webView.getParent();
if (parent != null) {
((ViewGroup) parent).removeView(webView);
}
webView.stopLoading();
// 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
webView.getSettings().setJavaScriptEnabled(false);
webView.clearHistory();
webView.clearView();
webView.removeAllViews();
webView.destroy();
}
}
【2.在mainfest.xml中去掉页面的硬件加速。
【3.在布局文件中将layerType去掉。
2.本地调用html代码。
//html代碼的js的路徑(路径是写死的)
String jsUrl = Api.DOMAIN_API + "/js/app_html_show_img.js";
mWebContent.loadDataWithBaseURL(jsUrl, content ,"text/html", "utf-8", null);
3.將html代码中的图片的适应(不超过屏幕),html代码中的链接不可点击。
WebViewClient
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
imgReset(view);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//html中的链接禁止点击
return true;
}
//图片适应
private void imgReset(WebView webContent) {
webContent.loadUrl("javascript:(function(){" +
"var objs = document.getElementsByTagName('img'); " +
"for(var i=0;i<objs.length;i++) " +
"{"
+ "var img = objs[i]; " +
" img.style.maxWidth = '100%';img.style.height='auto';" +
"}" +
"})()");
}
4.WebView滑动到底部后自动又滑动顶部,需要在WebView中添加属性:
android:focusable="false"
android:focusableInTouchMode="false"
或者:
解决以上问题可以在Scrollview中所使用的LinearLayout添加如下属性:android:descendantFocusability="blocksDescendants"
5.在页面播放音频,退出Activity音频仍然播放:
需要在onDestory()方法中调用webView.destroy();
并且rootLayout.removeView(webView);
6.WebView定位思路:
//定位上一次位置
webviewCommon.setOnScrollChangeListener(new VideoEnabledWebView.OnScrollChangeListener() {
@Override
public void onScrollChange(WebView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (mTouch) {
mScrollY = webviewCommon.getScrollY();
mClick = false;
}
}
});
webviewCommon.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mTouch = true;
}
return false;
}
});
//点击评论按钮:
case R.id.tv_comment:
AnalysisArticleUtil.mobClickAgent(AnalysisKeys.ARTICLE_COMMENTICON_ICON);
//回复数量按钮点击
mTouch = false;
if (!mClick) {
redirectAnchorPoint();
mClick = true;
return;
}
mClick = false;
webviewCommon.scrollTo(0, mScrollY);
break;