Android中WebView最常用的屬性
阿新 • • 發佈:2019-01-31
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);//支援javascript
settings.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自定義攔截
@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);
}
這裡解釋一下這個方法的返回值:
返回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); // 進行其他處理
}
});