Webview在我们平时开发中十分常用,几乎项目里面都会有嵌套网页。但是Webview可不是像我们平时loadUrl()就完了,它还有很多属性方法我们平时可能就没有开发出来。
-
前进 / 后退网页
//是否可以后退
Webview.canGoBack()
//后退网页
Webview.goBack()
//是否可以前进
Webview.canGoForward()
//前进网页
Webview.goForward()
//以当前页面为准,前进或者后退到历史记录中指定的steps页面数
//如果steps为负数则为后退,正数则为前进
Webview.goBackOrForward(int steps)
-
按系统back键怎么控制网页后退而不是直接关闭webview?
在当前展示Webview的Activity中处理Back事件,监听系统back键点击,在其中调用webview.goBack()方法。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
-
WebSettings类有哪些属性可以设置?
WebSettings webSettings = webView.getSettings();
//设置支持javascript
webSettings.setJavaScriptEnabled(true);
//支持插件
webSettings.setPluginsEnabled(true);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
//优先使用缓存
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
-
Webview属性
webView.clearCache(true); 清除缓存
webView.clearHistory(); 清除历史记录
webView.reload(); 重新加载
-
WebViewClient回调方法:
1、shouldOverrideUrlLoading() 打开网页时不调用系统浏览器, 而是在本WebView中显示;
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
2.onPageStarted() 开始加载页面调用
3.onPageFinished() 加载页面结束调用
-
WebChromeClient类
onProgressChanged()方法,回调加载网页进度,如有需要设置加载进度,可以在其中设置。
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
}
});
-
Webview内存泄漏解决
1、在使用webview时不用xml布局中引用,在代码中创建并用viewgroup调用addView()的方式。
2、在使用Activity的onDestroy方法中,让webview加载空,移除webview,webview销毁并置null。
@Override
protected void onDestroy() {
if (mWebView != null) {
mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
mWebView.clearHistory();
((ViewGroup) mWebView.getParent()).removeView(mWebView);
mWebView.destroy();
mWebView = null;
}
super.onDestroy();
}
-
Webview设置缓存机制
WebSettings settings = webView.getSettings();
//设置缓存路径
String cacheDirPath = getFilesDir().getAbsolutePath()+"cache/";
settings.setAppCachePath(cacheDirPath);
//设置缓存大小
settings.setAppCacheMaxSize(20*1024*1024);
//开启AppCache存储机制
settings.setAppCacheEnabled(true);
-
启动指定浏览器
在Android程序中我们可以通过发送显式Intent来启动指定的浏览器。例如,启动手机自带浏览器。
Intent intent =newIntent();
intent.setAction("android.intent.action.VIEW");
Uri content_url =Uri.parse("https://www.baidu.com");
intent.setData(content_url);
intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent);
启动其他浏览器,只要修改以intent.setClassName(package,activity)中2个参数,对应的应用浏览器程序packagename和要启动的activity即可启动其他浏览器。
uc浏览器 | com.uc.browser | com.uc.browser.ActivityUpdate |
---|---|---|
opera浏览器 | com.opera.mini.android | com.opera.mini.android.Browser |
qq浏览器 | com.tencent.mtt | com.tencent.mtt.MainActivity |
Webview基本功能总结如上,最后,还有其他功能Webview与Android交互。
网友评论