WebView控件的使用


好久沒有更新了!今天我們來學習WebView控件。廢話不多說,先看下我的運行結果吧!

接下來看下如何實現代碼邏輯!

第一步:在主布局中寫

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

第二步:對主JAVA代碼進行編寫

public class MainActivity extends AppCompatActivity {
   
   //定義控件
    private WebView webView;
    private ProgressDialog pDialog
;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//加載布局
        init();//方法調用

    }

    private void init() {

        //尋找控件的ID
        webView= (WebView) findViewById(R.id.webView);
       //webView加載web資源,打開方式是默認的瀏覽器
        webView.loadUrl("http://www.imooc.com/course/programdetail/pid/33");
        //覆蓋WebView默認通過第三方或者是系統瀏覽器打開的行為,使得網頁可以在WebView中打開
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                webView.loadUrl(url);
           //返回值為true的時候控制網頁在WebView中打開,為false時調用系統瀏覽器呀第三方瀏覽器
                return false;
            }
        });
        //啟用支持JavaScript
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);
        //WebView加載頁面優先使用緩存加載
        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //頁面加載的進度
        webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                //newProgress為1~100之間的整數
                if(newProgress==100){
                    //網頁加載完畢,關閉ProgressDialog
                    closeDialog();
                }else{
                    //網頁正在加載,打開ProgressDialog
                    openDialog(newProgress);
                }
            }

            private void closeDialog() {
                //進度條不為空並且顯示有進度條時
                if(pDialog!=null&&pDialog.isShowing()){
                    pDialog.dismiss();//進度條取消顯示
                    pDialog=null;//並且進度條設置為空
                }
            }

            private void openDialog(int newProgress) {
                //進度條為空時
                if (pDialog==null){
                    pDialog=new ProgressDialog(MainActivity.this);
                    pDialog.setTitle("正在加載...");
                    //進度條的樣式
                    pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    pDialog.setProgress(newProgress);//顯示進度條的進度
                    pDialog.show();//顯示進度條
                }else {
                    pDialog.setProgress(newProgress);//顯示最新(刷新)的進度
                }
            }
        });
    }

    //改寫物理按鍵--返回的邏輯
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if (webView.canGoBack()){
                webView.goBack();//返回上一頁面
                return true;
            }else{
                System.exit(0);//退出
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}

哼哼,是不是感覺太多了雖然有備注可是還是覺得看不懂!沒事沒事!下面我們來看下如何一步一步的完成成這個Demon

1.對控件進行實例化

 private WebView webView;
  private ProgressDialog pDialog;

 webView= (WebView) findViewById(R.id.webView);

2.來進行網頁的加載!這里有兩種加載方式

1)是在你的手機默認的瀏覽器中打開

2)還有一個是通過第三方的瀏覽器來打開

  //webView加載web資源,打開方式是默認的瀏覽器
        webView.loadUrl("http://www.imooc.com/course/programdetail/pid/33");
        //覆蓋WebView默認通過第三方或者是系統瀏覽器打開的行為,使得網頁可以在WebView中打開
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                webView.loadUrl(url);
           //返回值為true的時候控制網頁在WebView中打開,為false時調用系統瀏覽器呀第三方瀏覽器
                return false;
            }
        }); 

溫馨提示:如果要訪問網絡,需在配置清單中加載權限

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

做完以上步驟之后來進行運行一下!它是可以實現的

當你點擊按鈕時會進入到另一個界面!但當你按返回時它會直接退出程序界面!!!

此時想一想這是為什么呢?下面來看下我們的實現方式!

 //改寫物理按鍵--返回的邏輯
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if (webView.canGoBack()){
                webView.goBack();//返回上一頁面
                return true;
            }else{
                System.exit(0);//退出
            }
        }
        return super.onKeyDown(keyCode, event);
    }

加入這個代碼之后再運行一下!再當你按返回鍵時它就可以返回到上一頁了!!!

4.好了!實現以上功能之后再來看看如何實現對話框的!就是ProgressDialog

      webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                //newProgress為1~100之間的整數
                if(newProgress==100){
                    //網頁加載完畢,關閉ProgressDialog
                    closeDialog();//調用該方法
                }else{
                    //網頁正在加載,打開ProgressDialog
                    openDialog(newProgress);
                }
            }

            private void closeDialog() {
                //進度條不為空並且顯示有進度條時
                if(pDialog!=null&&pDialog.isShowing()){
                    pDialog.dismiss();//進度條取消顯示
                    pDialog=null;//並且進度條設置為空
                }
            }

            private void openDialog(int newProgress) {
                //進度條為空時
                if (pDialog==null){
                    pDialog=new ProgressDialog(MainActivity.this);
                    pDialog.setTitle("正在加載...");
                    //進度條的樣式
                    pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    pDialog.setProgress(newProgress);//顯示進度條的進度
                    pDialog.show();//顯示進度條
                }else {
                    pDialog.setProgress(newProgress);//顯示最新(刷新)的進度
                }
            }
        });
    }

寫完之后再來運行一下,按返回鍵時便會有Dialog!那么問題來了!運行時雖然有Dialog但你運行時有沒有發現出現的Dialog它沒有一個過程就跳到另一個界面來所以下面我們來實現該功能

 //啟用支持JavaScript
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);
        //WebView加載頁面優先使用緩存加載
        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        //頁面加載的進度

就是說對Dialog來寫一個緩存機制!再來運行一下就會出現和我一樣的效果圖了...好了!到這里你學會WebView的使用了嗎?

如果覺得對你有幫助的話給個贊唄!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM