Android--WebView开发项目使用这些就够了

binbin60 8年前
   <p>WebView基本使用:</p>    <p><strong>1、加载网页、刷新网页、前进、后退</strong></p>    <p>在xml文件中</p>    <pre>  <code class="language-java"><WebView      android:id="@+id/wv_test"      android:layout_width="match_parent"      android:layout_height="match_parent" /></code></pre>    <p>在java代码中:</p>    <pre>  <code class="language-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();</code></pre>    <p><strong>2、设置一些参数</strong></p>    <p>注: 需要用到什么设置,随时查一下即可。最后一条在加载含有Html5新标签的网页的时候需要加上这句话。</p>    <pre>  <code class="language-java">WebSettings settings = wvTest.getSettings();  settings.setJavaScriptEnabled(true);//支持javascript  settings.setUseWideViewPort(true);//适配屏幕  settings.setLoadWithOverviewMode(true);  settings.setBuiltInZoomControls(true);//支持放大缩小  settings.setDisplayZoomControls(false);//隐藏放大缩小的按钮  settings.setDomStorageEnabled(true);//支持Html5标签  ……等</code></pre>    <p><strong>3、获取网页标题</strong></p>    <pre>  <code class="language-java">class MyWebViewChromeClient extends WebChromeClient{      @Override      public void onReceivedTitle(WebView view, String title) {          super.onReceivedTitle(view, title);          L.D("title就是网页标题:" + title);      }  }  wvTest.setWebChromeClient(new MyWebViewChromeClient());</code></pre>    <p><strong>4、下载文件</strong></p>    <pre>  <code class="language-java">wvTest.setDownloadListener(new DownloadListener() {      @Override      public void onDownloadStart(String url, String userAgent,                      String contentDisposition, String mimetype, long contentLength) {          //需要下载的文件的地址就是url,及可以下载文件              }  });</code></pre>    <p>调用系统浏览器去下载文件(updateUrl是下载地址):</p>    <pre>  <code class="language-java">Intent intent= new Intent();  intent.setAction("android.intent.action.VIEW");  Uri content_url = Uri.parse(updateUrl);  intent.setData(content_url);    startActivity(Intent.createChooser(intent, "请选择浏览器"));</code></pre>    <p><strong>5、WebView错误码处理</strong></p>    <p>就在网页加载失败、没有网络的情况下WebView会把加载的网页地址显示出来。为了避免这种情况,我们需要做如下处理:</p>    <pre>  <code class="language-java">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());</code></pre>    <p><strong>6、和JavaScript交互(简单的调用、传值)</strong></p>    <p>Java代码:</p>    <pre>  <code class="language-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");</code></pre>    <p>JavaScript代码:</p>    <pre>  <code class="language-java">function call(){      demo.callFromJs();  }  <img src="img/refreshicon.png" onclick="call()" alt="轻触屏幕重新刷新" /></code></pre>    <p><strong>7、WebView自定义拦截</strong></p>    <pre>  <code class="language-java">@Override  public 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);  }</code></pre>    <p>这里解释一下这个方法的返回值:</p>    <p>返回true:</p>    <p>webview处理url是根据程序来执行的。即:如果返回为true,即不再会通过webview加载,而是执行你写的拦截的程序,如果没有的话就不执行(不执行就是,内容有href,超链接也不会跳转了)</p>    <p>返回false:</p>    <p>webview处理url是在webview内部执行。返回false的话就可以执行内容的超链接跳转。</p>    <p><strong>8、清空WebView缓存</strong></p>    <pre>  <code class="language-java">/**   * 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);        }    }</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/7223e35da485</p>    <p> </p>