WebView解析
WebView解析
一、WebView的添加同绝大多数控件一样,主要有两种添加方式:第一,类似于普通控件的定义,先在xml文件里添加webview控件,再通过findViewById()获得;第二种方式如下: WebView webView = new WebView(this); setContentView(webView);
网页的加载:webView,loadUrl("http://www.hzeduask.com"); //这里是全部域名 本地文件的加载:webView.loadUrl("file:///android_asset/aaa.html"); 文件放在目录下assets文件夹下,也可以加载sd卡本地html文件(file://不能少)
// 访问页面中有JavaScript,必须设置支持JavaScript webView.getSettings().setJavaScriptEnabled(true); // 启用WebView访问文件数据 webView.getSettings().setAllowFileAccess(true); // 设置支持缩放 webView.getSettings().setSupportZoom(true); webView.getSettings().setBuiltInZoomControls(true); // 设置缩放比例 webView.setInitialScale(35); // 设置是否显示网络图像---true,封锁网络图片,不显示 false----允许显示网络图片 webView.getSettings().setBlockNetworkImage(false); // 设置支持插件 webView.getSettings().setPluginsEnabled(true); // 将图片调整到适合WebView大小 webView.getSettings().setUseWideViewPort(true); // 支持多窗口 webView.getSettings().supportMultipleWindows(); // 设置自动加载图片 webView.getSettings().setLoadsImagesAutomatically(true); // 设置渲染优先级 webView.getSettings().setRenderPriority(RenderPriority.HIGH); // 设置默认字体大小 webView.getSettings().setDefaultFontSize(50); // 如果需要用户输入账号密码,必须设置支持手势焦点 webView.requestFocusFromTouch(); // 取消滚动条 webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
WebSettings.LOAD_CACHE_ELSE_NETWORK---只要本地有,无论是否过期,都使用缓存数据;只要打开过一次就使用缓存数据 WebSettings.LOAD_CACHE_ONLY---只使用缓存 WebSettings。LOAD_NO_CACHE---不使用缓存 WebSettings.LOAD_DEFAULT---控制器决定是否从网络获取数据,无论如果都从网络获取数据,没有网络就报错 WebSettings.LOAD_NORMAL---同默认 // 设置缓存模式 webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); // 启用缓存 webView.getSettings().setAppCacheEnabled(true); // 设置最大缓存容量---100M webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 100);
1、WebViewClient主要为WebView处理各种通知、请求事件。setWebViewClient()该方法作用于点击链接时调用,点击跳转时,加载新的webview资源,并可以在加载前后添加操作,比如添加缓冲对话 框,该方法的作用使得点击链接的响应在WebView内执行,而不是手机浏览器。 webView.setWebViewClient(new WebViewClient() { //用于加载新WebView,返回true代表着用完就消费掉 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } //用于加载新Webview之前,一般在此加载缓冲区 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon);
} //用于加载新Webview之后,一般在此消除缓冲区 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url);
} //加载错误时调用,一般提示错误信息 @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl);
Toast.LENGTH_SHORT).show(); }
2.WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等 webView.setWebChromeClient(new WebChromeClient(){
//打开新WebView时,设置加载进度,进度显示于最上方标题位置 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); WebViewDemo.this.setProgress(newProgress*100); } //设置新WebView的标题,显示于最上方标题位置 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); WebViewDemo.this.setTitle(title); } //创建新WebView,加载新资源,并设置 @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView child=new WebView(WebViewDemo.this); child.getSettings().setJavaScriptEnabled(true); child.getSettings().setAllowFileAccess(true); child.getSettings().setSupportZoom(true); child.getSettings().setBuiltInZoomControls(true); child.setInitialScale(35); child.getSettings().setBlockNetworkImage(true); child.getSettings().setPluginsEnabled(true); child.getSettings().setUseWideViewPort(true); child.getSettings().supportMultipleWindows(); child.getSettings().setLoadsImagesAutomatically(true); child.getSettings().setLoadWithOverviewMode(true); //通过WebViewTransport设置新WebView child.setWebChromeClient(this); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(child); resultMsg.sendToTarget(); return true; }
});
1、WebView的使用需要添加网络权限 <uses-permission android:name="android.permission.INTERNET"/> 2、WebView的返回需要重写Activity的onKeyDown方法,使得回退返回至上一级,如果不重写,将会 完全退出,代码如下: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { webView.goBack(); return true; } return super.onKeyDown(keyCode, event); } |