WebView是android.webkit包下的一個組件,能用來顯示網頁。 html
WebView默認是不帶地址欄和加進度條的,單單是一個顯示網頁內容的面板。 java
使用WebView很是簡單,主要是經過load方法進行加載。 android
1、[使用WebView打開一個網頁]
1.在佈局xml文件中定義WebView組件
< WebView android:id = "@+id/webview"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
/> web
2.在AndroidManifest.xml中添加網絡訪問權限
<uses-permission android:name="android.permission.INTERNET"/> 瀏覽器
3.經過load函數加載網頁 網絡
mWebview = (WebView) this .findViewById(R.id. webview ); ide
// 簡單地加載一個頁面
mWebview .loadUrl(url);
// 加載assets目錄下的頁面(assetsindex.html)
mWebview .loadData( "file:///android_asset/index.html" ); 函數
但你會發現,若是點擊頁面的某條連接進行跳轉的話,會啓動系統的默認瀏覽器進行加載,調出了咱們自己的應用。要解決這個問題咱們須要藉助於WebViewClient。 佈局
2、自定義跳轉連接:(重寫WebViewClient中的shouldOverrideUrlLoading()方法) ui
mWebview .setWebChromeClient( new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url){ // 使用當前的WebView加載頁面 view.loadUrl(url); return true ; } });
在WebViewClient中還有不少的方法,例如:
public void onPageStarted(WebView view, String url, Bitmap favicon);
public void onPageFinished(WebView view, String url);
public void onLoadResource(WebView view, String url)
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
咱們均可以經過重寫來實現本身的個性化操做。
3、頁面回退
實現了跳轉後,你突然想返回到前一個瀏覽過的頁面是,發現返回鍵是直接退出應用了。要實現相似系統瀏覽器那樣的,返回鍵先是返回到上一個頁面,直到最初始的頁面才退出的話,能夠這麼作:
// 重寫onKeyDown public boolean onKeyDown ( int keyCode, KeyEvent event) { if ((keyCode == KeyEvent. KEYCODE_BACK ) && mWebview .canGoBack()) { mWebview .goBack(); return true ; } return super .onKeyDown(keyCode, event); }
4、增長進度條
要是再加上加載進度條那就完美了,咱們能夠藉助WebChromeClient來實現:
mWebview .setWebChromeClient( new WebChromeClient() { public void onProgressChanged (WebView view, int newProgress){ loadingProgress .setProgress(newProgress); } });5、WebView彈出框的處理
WebView默認狀況下是沒法彈出彈出框的,爲了當咱們點擊事件是彈出框能夠彈出,就須要對WebView進行一些處理,咱們須要藉助WebChromeClient來實現WebView與js的交互
mWebView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message,final JsResult result) { // TODO Auto-generated method stub AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("title") .setMessage(message) .setPositiveButton("肯定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.create(); builder.show(); return super.onJsAlert(view, url, message, result); } @Override public boolean onJsConfirm(WebView view, String url,String message, JsResult result) { // TODO Auto-generated method stub return super.onJsConfirm(view, url, message, result); } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { // TODO Auto-generated method stub return super.onJsPrompt(view, url, message, defaultValue, resul; } });
通常狀況下,只須要重寫其中的一種方法,重寫方法以後,若是彈出框只彈出一次,那麼要在return以前加上result.cancel();即:
mWebView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message,final JsResult result) { // TODO Auto-generated method stub AlertDialog.Builder builder = new AlertDialog.Builder(context) .setTitle("title") .setMessage(message) .setPositiveButton("肯定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub result.confirm(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.create(); builder.show(); result.cancel(); return true; } @Override public boolean onJsConfirm(WebView view, String url,String message, JsResult result) { // TODO Auto-generated method stub return super.onJsConfirm(view, url, message, result); } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { // TODO Auto-generated method stub return super.onJsPrompt(view, url, message, defaultValue, resul; } });