android學習之WebView

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;
			}
			
		});
相關文章
相關標籤/搜索