Web初試

先貼代碼
package com.example.admin.test_0309_1;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private String url="http://www.baidu.com";
    private WebView webView;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       /*
        Uri uri=Uri.parse(url);
        Intent intent=new Intent(Intent.ACTION_VIEW,uri);
        startActivity(intent);
        */
        init();

    }

    private void init() {
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.hao123.com");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //爲true的的時候就在webview中打開
                view.loadUrl(url);
                return true;
            }
        });

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == 100) {
                    //網頁加載完畢
                    closeDialog();
                } else {
                    //網頁正在加載

                    openDialog(newProgress);
                }
                super.onProgressChanged(view, newProgress);
            }

            private void closeDialog() {
                if (progressDialog != null) {
                    progressDialog.dismiss();
                    progressDialog = null;

                }
            }

            private void openDialog(int newProgress) {
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setTitle("正在加載");
                    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    progressDialog.setProgress(newProgress);
                    progressDialog.show();
                } else {
                    progressDialog.setProgress(newProgress);
                }
            }

        });
    }
    //改寫物理按鍵--返回的邏輯

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
            if(webView.canGoBack()){
                webView.goBack();
                return true;
            }else{
                System.exit(0);
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}


當然佈局中已經把webView加入了佈局中  這裏運行webView必須得先在Androidmanifest里加入入網許可如下:

<uses-permission android:name="android.permission.INTERNET"/>
然後就設置webView就可以了

這裏記錄一下幾個重要的設置

/*
 Uri uri=Uri.parse(url);
 Intent intent=new Intent(Intent.ACTION_VIEW,uri);
 startActivity(intent);
 */
url爲設置好的超鏈接字符串 上面是可以用intent方式來打開  當然 這個方法會默認使用系統中自帶的瀏覽器或者第三方瀏覽器來打開網頁

所以爲了讓webView打開網頁就涉及一個方法  覆蓋系統中的瀏覽器用控件自己打開 方法如下

webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("http://www.hao123.com");
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //true的的時候就在webview中打開
        view.loadUrl(url);
        return true;
    }
});

WebViewClient中的 shoulidOverrideUrlLoading方法 返回true即爲使用控件打開 false相反

這裏可以看到在方法中 有view.loadUrl(url)  這裏的url並不是我一開始設置的url字符串  而是方法中的參數 他的數值應該是前面載入的 hao123


然後是set方法設置JS屬性

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

通過WebSetting方法來攝製JavaScript的載入 這裏選擇爲true

此時的網頁載入進去之後就會發現不管你打開多少的網頁 只要你點擊啊的back就會直接退出程序  所以這裏需要重寫在webview中back按鍵的響應

方法onKeyDown

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK){
        //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
        if(webView.canGoBack()){
            webView.goBack();
            return true;
        }else{
            System.exit(0);
        }
    }
    return super.onKeyDown(keyCode, event);
}

語言描述一下 如果按鍵是返回鍵  

如果網頁可以返回

那麼返回

方法返回值 true

否則結束程序

最後的返回語句別刪了 

現在的網頁就基本完成了  但是美中不足需要在其中加入一個進度條 這樣可以在等待頁面的時候顯得不那麼傻

所以有以下的方法

setWebChromeClient
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        if (newProgress == 100) {
            //網頁加載完畢
            closeDialog();
        } else {
            //網頁正在加載

            openDialog(newProgress);
        }
        super.onProgressChanged(view, newProgress);
    }

    private void closeDialog() {
        if (progressDialog != null) {
            progressDialog.dismiss();
            progressDialog = null;

        }
    }

    private void openDialog(int newProgress) {
        if (progressDialog == null) {
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setTitle("正在加載");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setProgress(newProgress);
            progressDialog.show();
        } else {
            progressDialog.setProgress(newProgress);
        }
    }

});
添加方法後 進行設置  如果newProgress ==100 即是 如果進度條滿了 那麼 關閉進度條 當然這裏的進度條是自己在前面要添加的   前面有學過 ProgressDialog

不爲100就打開進度條 

然後設置進度條打開關閉的方法

當然  打開肯定是先有的

檔進度條==null 不存在時候 添加一個新的進度條 在當前界面 設置標題正在加載  設置風格    設置加入setWebChromeClient中的newProgress  然後show出來 否則直接加入newProgress

然後就是關閉的方法  如果不是空  就關閉咯


最後是webView運行模式  是否使用本地緩存

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
同樣是webSetting中的一個方法  setCacheMode


完畢  



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章