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;
			}
			
		});
相关文章
相关标签/搜索