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>