Android個(gè)人總結(jié)之WebView的簡(jiǎn)單使用

WebView在Andorid中就是用來顯示網(wǎng)頁(yè)的,我們來看看它是如何使用的。

一、基本使用

1.聲明權(quán)限,WebView不可避免地要用到網(wǎng)絡(luò),我們要加上網(wǎng)絡(luò)訪問權(quán)限。

<uses-permission android:name="android.permission.INTERNET"/>

2.放入Layout

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

3.在Activity中引用

private WebView webView;
webView = (WebView) findViewById(R.id.web);
webView.loadUrl("http://piaoshu.org");
//webView.loadUrl("file:///android_asset/xx.html");也可以加載本地的html

這時(shí)你會(huì)發(fā)現(xiàn),應(yīng)用會(huì)自動(dòng)跳出系統(tǒng)或第三方瀏覽器,也就是說你無法在自己的應(yīng)用中顯示自己的網(wǎng)頁(yè)。怎么辦呢?接下來介紹WebView兩個(gè)重要的監(jiān)聽事件。

二、WebViewClient與WebChromeClient

webView.setWebViewClient()主要用于加載網(wǎng)頁(yè)過程的監(jiān)聽。

webView.setWebViewClient(new WebViewClient(){
    @Override
    //只要重寫此方法,就能在本應(yīng)用中加載網(wǎng)頁(yè)
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;//返回值時(shí)true的時(shí)候控制網(wǎng)頁(yè)在WebView中去打開,如果為false調(diào)用系統(tǒng)瀏覽器或第三方瀏覽器
    }
   @Override  
   public void onReceivedError(WebView view, int errorCode,  
      String description, String failingUrl) {  
//收到錯(cuò)誤信息的時(shí)候,系統(tǒng)執(zhí)行此操作.
//比如當(dāng)出現(xiàn)404錯(cuò)誤碼時(shí),我們可以自己寫個(gè)html放在asset文件夾中,把webView隱藏掉而顯示本地的網(wǎng)頁(yè)。
        }  
  
        @Override  
        public void onPageStarted(WebView view, String url, Bitmap favicon) {  
            super.onPagStarted(view, url, favicon);  
            //若想在網(wǎng)頁(yè)開始加載時(shí)執(zhí)行一些操作,重寫該方法 
        }  
  
        @Override  
        public void onPageFinished(WebView view, String url) {  
            super.onPageFinished(view, url);  
            //若想在網(wǎng)頁(yè)結(jié)束時(shí)執(zhí)行一些操作,重寫該方法 
        } 
}
);

webView.setWebChromeClient()主要用于加載網(wǎng)頁(yè)過程對(duì)UI的操作。

webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        progressBar.setProgress(newProgress);
//newProgress的值為1到100的整數(shù),我們可以利用這個(gè)參數(shù)使用ProgressBar或ProgressDialog顯示加載進(jìn)度
        } 
   }
    @Override
    public void onReceivedTitle(WebView view, String title) { 
       textView.setText(title);//參數(shù)title為網(wǎng)頁(yè)的標(biāo)題,可以用一個(gè)textView來顯示。
   }
}
);

好了,我們來看看網(wǎng)頁(yè)加載的情況。


247663169532307420.jpg

看起來網(wǎng)頁(yè)加載得很好,其實(shí)我已經(jīng)設(shè)置了一些相關(guān)屬性。我們來看看WebView 有哪些屬性

三、WebSettings

WebSettings settings=webView.getSettings();
//支持JavaScript腳本
settings.setJavaScriptEnabled(true);
//設(shè)置WebView支持廣泛的視窗  
settings.setUseWideViewPort(true); 
//支持手勢(shì)縮放  
settings.setBuiltInZoomControls(true); 
//設(shè)置WebView 支持加載更多格式頁(yè)面  
settings.setLoadWithOverviewMode(true);
//WebView加載頁(yè)面優(yōu)先使用緩存加載 
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

還有一些屬性我就不講出來了,有興趣的自己搜一下。

四、下載文件

webview中有時(shí)含有下載文件的鏈接,點(diǎn)擊鏈接后文件會(huì)被下載到本地中。如何實(shí)現(xiàn)呢?系統(tǒng)為我們提供了一個(gè)下載接口DownloadListener,代碼簡(jiǎn)單而方便。
我們只要寫一個(gè)類實(shí)現(xiàn)此接口并重寫方法,通過Intent調(diào)用系統(tǒng)的瀏覽器

class MyListenter implements DownloadListener{
    @Override
    public void onDownloadStart(String url, String userAgent,                                String contentDisposition, String mimetype, long contentLength) {
      Uri uri = Uri.parse(url); //url即下載鏈接
       Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
      startActivity(intent);
    }
}

別忘了設(shè)置監(jiān)聽器

webView.setDownloadListener(new MyListenter());

我們借助了第三方瀏覽器進(jìn)行下載,這是最簡(jiǎn)單的做法
點(diǎn)擊Android下載,效果如下


20633713252534019.jpg

或者我們可以寫一個(gè)線程進(jìn)行下載,在onDownloadStart()方法中啟動(dòng)線程就可以了,具體代碼就不貼上來了。

好了,所有內(nèi)容差不多就這樣,總結(jié)一下用法。
使用前記得申明權(quán)限,控件的引用就不用說了。
重點(diǎn)在于WebViewClient與WebChromeClient兩個(gè)類。
webView.setWebViewClient()主要用于加載網(wǎng)頁(yè)過程的相關(guān)操作。
webView.setWebChromeClient()則用于加載網(wǎng)頁(yè)過程對(duì)UI的操作。
系統(tǒng)還我們提供了一個(gè)下載接口DownloadListener。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容