Android中WebView最常用的属性

来源:互联网 发布:凤凰金融 以大数据 编辑:程序博客网 时间:2024/05/18 05:05

WebView基本使用:

1、加载网页、刷新网页、前进、后退

在xml文件中

<WebView    android:id="@+id/wv_test"    android:layout_width="match_parent"    android:layout_height="match_parent" />

在java代码中:

WebView wvTest = (WebView)findViewById(R.id.wv_banner);//加载网络网页wvTest.loadUrl("http://www.baidu.com");//加载本地网页wvTest.loadData("file:///android_asset/refresh/refresh.html");//返回上个页面if(wvTest.canGoBack()){  wvTest.goBack();}//去刚才浏览的页面if(wvTest.canGoForward()){  wvTest.goForward();}//刷新当前页面wvTest.reload();
2、设置一些参数

注: 需要用到什么设置,随时查一下即可。最后一条在加载含有Html5新标签的网页的时候需要加上这句话。

WebSettings settings = wvTest.getSettings();settings.setJavaScriptEnabled(true);//支持javascriptsettings.setUseWideViewPort(true);//适配屏幕settings.setLoadWithOverviewMode(true);settings.setBuiltInZoomControls(true);//支持放大缩小settings.setDisplayZoomControls(false);//隐藏放大缩小的按钮settings.setDomStorageEnabled(true);//支持Html5标签……等
3、获取网页标题
class MyWebViewChromeClient extends WebChromeClient{    @Override    public void onReceivedTitle(WebView view, String title) {        super.onReceivedTitle(view, title);        L.D("title就是网页标题:" + title);    }}wvTest.setWebChromeClient(new MyWebViewChromeClient());
4、下载文件
wvTest.setDownloadListener(new DownloadListener() {    @Override    public void onDownloadStart(String url, String userAgent,                    String contentDisposition, String mimetype, long contentLength) {        //需要下载的文件的地址就是url,及可以下载文件            }});

调用系统浏览器去下载文件(updateUrl是下载地址):

Intent intent= new Intent();intent.setAction("android.intent.action.VIEW");Uri content_url = Uri.parse(updateUrl);intent.setData(content_url);  startActivity(Intent.createChooser(intent, "请选择浏览器"));
5、WebView错误码处理

就在网页加载失败、没有网络的情况下WebView会把加载的网页地址显示出来。为了避免这种情况,我们需要做如下处理:

class MyWebViewClient extends WebViewClient{    @Override    public void onReceivedError(WebView view, int errorCode,            String description, String failingUrl) {        super.onReceivedError(view, errorCode, description, failingUrl);                    //在这里进行加载错误、没有网络情况的处理                    //方式1:加载一个本地的默认页面                    wvTest.loadData("file:///android_asset/refresh/refresh.html");                    //方式2:显示一个默认布局                    tvDefault.setText("网页加载失败");                    wvTest.setVisibility(View.GONE);    }}wvTest.setWebViewClient(new MyWebViewClient());
6、和JavaScript交互(简单的调用、传值)

Java代码:

//被javascript调用的类class CalledByJs {    private Context mContext;    public CalledByJs(Context context){        this.mContext = context;    }            //在js中被调用的方法    @JavascriptInterface    public void callFromJs(){        Toast.makeText(mContext, "js调用啦~", Toast.LENGTH_LONG).show();    }}settings.setJavaScriptEnabled(true);wvTest.addJavascriptInterface(new CalledByJs(this), "demo");

JavaScript代码:

function call(){    demo.callFromJs();}<img src="img/refreshicon.png" onclick="call()" alt="轻触屏幕重新刷新" />
7、WebView自定义拦截
@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {  if(!TextUtils.isEmpty(url)){    if("open_login".equals(url)){        Intent intent = new Intent(this,LoginActivity.class);        startActivity(intent);        return true;    }else {        return false;    }  }  return super.shouldOverrideUrlLoading(view, url);}

这里解释一下这个方法的返回值:
返回true:
webview处理url是根据程序来执行的。即:如果返回为true,即不再会通过webview加载,而是执行你写的拦截的程序,如果没有的话就不执行(不执行就是,内容有href,超链接也不会跳转了)

返回false:
webview处理url是在webview内部执行。返回false的话就可以执行内容的超链接跳转。

8、获取Web页面的标题,显示Web加载进度

其中显示Web页面加载进度有两种方式:

class MyChromeClient extends WebChromeClient{    //获取Web页面标题    @Override    public void onReceivedTitle(WebView view, String title) {        title(title);        if(TextUtils.isEmpty(shareDesc)){            shareDesc = title;            shareTitle = title;        }    }    //显示Web页面加载进度 方式1:    @Override    public void onProgressChanged(WebView view, int newProgress){         if (newProgress == 100) {             pbWebLoad.setVisibility(View.GONE);         } else {             if (View.GONE == pbWebLoad.getVisibility()) {                 pbWebLoad.setVisibility(View.VISIBLE);             }             pbWebLoad.setProgress(newProgress);         }         super.onProgressChanged(view, newProgress);    }}//显示Web页面加载进度 方式2:private class MyWebViewClient extends WebViewClient{@Override    public void onPageStarted(WebView view, String url, Bitmap favicon) {        super.onPageStarted(view, url, favicon);        //弹Loading框进行加载    }    @Override    public void onPageFinished(WebView view, String url) {        super.onPageFinished(view, url);        //消失Loading框,加载完毕    }}
9、清空WebView缓存
/** * WebView清空缓存 */public static void clearCache(Context context) {    CookieSyncManager cookieSyncMngr = CookieSyncManager.createInstance(context);    CookieManager cookieManager = CookieManager.getInstance();    cookieManager.removeAllCookie();    context.deleteDatabase("webview.db");    context.deleteDatabase("webviewCache.db");    context.deleteDatabase("webviewCookiesChromium.db");    context.deleteDatabase("webviewCookiesChromiumPrivate.db");    //WebView 缓存文件      File webviewCacheDir = new File(context.getCacheDir().getAbsolutePath()+"/webviewCacheChromium");      //删除webview 缓存目录      if(webviewCacheDir.exists()){          deleteFile(webviewCacheDir);      }  }
10、访问https地址
wvTest.setWebViewClient(new WebViewClient(){        @Override        public void onReceivedSslError(WebView view,SslErrorHandler handler, SslError error) {            super.onReceivedSslError(view, handler, error);            //handler.cancel(); // Android默认的处理方式            handler.proceed();  // 接受所有网站的证书            //handleMessage(Message msg); // 进行其他处理        }    });
1 0