Android_WebView用法

如果想WebView能够访问网络,必须在AndroidManifest.xml里面添加权限

[html]  view plain copy
  1. <uses-permission android:name="android.permission.INTERNET" />  

main.xml很简单,就是一个WebView

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <WebView  
  8.         android:id="@+id/webView"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent" />  
  11.   
  12. </LinearLayout>  

WebViewDemoActivity.java代码:

[java]  view plain copy
  1. package com.tianjf;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.webkit.WebView;  
  6.   
  7. public class WebViewDemoActivity extends Activity {  
  8.   
  9.     private WebView mWebView;  
  10.   
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.   
  16.         mWebView = (WebView) findViewById(R.id.webView);  
  17.   
  18.         // 得到WebSettings对象,设置支持JavaScript参数  
  19.         // 如果访问的页面中有JavaScript,则WebView必须设置支持JavaScript ,否则显示空白页面  
  20.         mWebView.getSettings().setJavaScriptEnabled(true);  
  21.         // 加载URL  
  22.         mWebView.loadUrl("http://www.baidu.com/");  
  23.     }  
  24. }  

运行一下就会看到URL被正确load出来了。

但是有个问题,当点击链接继续浏览,则会弹出系统默认的Browser,为了能够继续在WebView中浏览,要用到shouldOverrideUrlLoading方法:

[java]  view plain copy
  1. @Override  
  2. public void onCreate(Bundle savedInstanceState) {  
  3.   
  4.     。。。。。。。。。。。。。。。。。。。。。。。。                  
  5.   
  6.     // 虽然Google主页在WebView中显示了,但是如果点击链接继续浏览,则会显示到系统默认的Browser中  
  7.     // 为了继续在WebView中显示,需要重写shouldOverrideUrlLoading方法  
  8.     mWebView.setWebViewClient(new MyWebViewClient());  
  9.          
  10.   
  11.     。。。。。。。。。。。。。。。。。。。。。。。。          
  12.        }  
  13.   
  14. private class MyWebViewClient extends WebViewClient {  
  15.     @Override  
  16.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  17.         view.loadUrl(url);  
  18.         return true;  
  19.     }  
  20. }  


另外,如果想按回退键回到上一个页面,那么

[java]  view plain copy
  1. /** 
  2.  * 按back键可以回到上个网页 
  3.  */  
  4. @Override  
  5. public boolean onKeyDown(int keyCode, KeyEvent event) {  
  6.     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {  
  7.         mWebView.goBack();  
  8.         return true;  
  9.     }  
  10.     return super.onKeyDown(keyCode, event);  
  11. }  

对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed 方法即可,代码如下

[java]  view plain copy
  1. @Override  
  2. public void onBackPressed() {  
  3.  // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk  
  4. return ;  
  5. }  

如果想加载工程中的HTML,那么可以用到下面的方法(前提是HTML放在assets目录中)

[java]  view plain copy
  1. mWebView.loadUrl("file:///android_asset/test.html");  

如果想直接load一段HTML文,可以用下面的方法

[java]  view plain copy
  1. mWebView.loadData("<html><body>abcdefg</body></html>""text/html""utf-8");  

下面是WebView其他的一下用法:

设置允许访问文件数据

[java]  view plain copy
  1. mWebView.getSettings().setAllowFileAccess(true);  

设置支持缩放

[java]  view plain copy
  1. mWebView.getSettings().setBuiltInZoomControls(true);  

设置是否保存密码

[java]  view plain copy
  1. mWebView.getSettings().setSavePassword(false);  

设置支持各种不同的设备

[java]  view plain copy
  1. mWebView.getSettings().setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");  

加载webview网页时所要执行的一些方法

[java]  view plain copy
  1. mWebView.setWebViewClient(new WebViewClient() {  
  2.         // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示  
  3.         @Override  
  4.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  5.             view.loadUrl(url);  
  6.             return true;  
  7.         }  
  8.           
  9.         // 开始加载网页时要做的工作  
  10.         @Override  
  11.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  12.             super.onPageStarted(view, url, favicon);  
  13.         }  
  14.           
  15.         // 加载完成时要做的工作  
  16.         @Override  
  17.         public void onPageFinished(WebView view, String url) {  
  18.             super.onPageFinished(view, url);  
  19.         }  
  20.           
  21.         // 加载错误时要做的工作  
  22.         @Override  
  23.         public void onReceivedError(WebView view, int errorCode,  
  24.                 String description, String failingUrl) {  
  25.             super.onReceivedError(view, errorCode, description, failingUrl);  
  26.         }  
  27.     });  

处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

[java]  view plain copy
  1. mWebView.setWebChromeClient(new WebChromeClient() {  
  2.         // 提示对话框  
  3.         @Override  
  4.         public boolean onJsAlert(WebView view, String url, String message,  
  5.                 final JsResult result) {  
  6.             // 构建一个Builder来显示网页中的alert对话框  
  7.             Builder builder = new Builder(WebViewDemoActivity.this);  
  8.             builder.setTitle("提示对话框");  
  9.             builder.setMessage(message);  
  10.             builder.setPositiveButton(android.R.string.ok,  
  11.                     new AlertDialog.OnClickListener() {  
  12.                         @Override  
  13.                         public void onClick(DialogInterface dialog,  
  14.                                 int which) {  
  15.                             result.confirm();  
  16.                         }  
  17.                     });  
  18.             builder.setCancelable(false);  
  19.             builder.create();  
  20.             builder.show();  
  21.             return true;  
  22.         }  
  23.   
  24.         // 带按钮的对话框  
  25.         @Override  
  26.         public boolean onJsConfirm(WebView view, String url,  
  27.                 String message, final JsResult result) {  
  28.             Builder builder = new Builder(WebViewDemoActivity.this);  
  29.             builder.setTitle("带选择的对话框");  
  30.             builder.setMessage(message);  
  31.             builder.setPositiveButton(android.R.string.ok,  
  32.                     new AlertDialog.OnClickListener() {  
  33.                         @Override  
  34.                         public void onClick(DialogInterface dialog,  
  35.                                 int which) {  
  36.                             result.confirm();  
  37.                         }  
  38.                     });  
  39.             builder.setNeutralButton(android.R.string.cancel,  
  40.                     new AlertDialog.OnClickListener() {  
  41.                         @Override  
  42.                         public void onClick(DialogInterface dialog,  
  43.                                 int which) {  
  44.                             result.cancel();  
  45.                         }  
  46.                     });  
  47.             builder.setCancelable(false);  
  48.             builder.create();  
  49.             builder.show();  
  50.             return true;  
  51.         }  
  52.   
  53.         // 带输入框的对话框  
  54.         @Override  
  55.         public boolean onJsPrompt(WebView view, String url, String message,  
  56.                 String defaultValue, final JsPromptResult result) {  
  57.             LayoutInflater inflater = LayoutInflater  
  58.                     .from(WebViewDemoActivity.this);  
  59.             final View v = inflater.inflate(R.layout.myDialog, null);  
  60.             // 设置 TextView对应网页中的提示信息  
  61.             ((TextView) v.findViewById(R.id.textView)).setText(message);  
  62.             // 设置EditText对应网页中的输入框  
  63.             ((EditText) v.findViewById(R.id.editText))  
  64.                     .setText(defaultValue);  
  65.   
  66.             Builder builder = new Builder(WebViewDemoActivity.this);  
  67.             builder.setTitle("带输入的对话框");  
  68.             builder.setView(v);  
  69.             builder.setPositiveButton(android.R.string.ok,  
  70.                     new AlertDialog.OnClickListener() {  
  71.                         @Override  
  72.                         public void onClick(DialogInterface dialog,  
  73.                                 int which) {  
  74.                             String value = ((EditText) v  
  75.                                     .findViewById(R.id.editText)).getText()  
  76.                                     .toString();  
  77.                             result.confirm(value);  
  78.                         }  
  79.                     });  
  80.             builder.setNegativeButton(android.R.string.cancel,  
  81.                     new AlertDialog.OnClickListener() {  
  82.                         @Override  
  83.                         public void onClick(DialogInterface dialog,  
  84.                                 int which) {  
  85.                             result.cancel();  
  86.                         }  
  87.                     });  
  88.             builder.setOnCancelListener(new DialogInterface.OnCancelListener() {  
  89.                 @Override  
  90.                 public void onCancel(DialogInterface dialog) {  
  91.                     result.cancel();  
  92.                 }  
  93.             });  
  94.             builder.create();  
  95.             builder.show();  
  96.             return true;  
  97.         }  
  98.   
  99.         // 设置网页加载的进度条  
  100.         @Override  
  101.         public void onProgressChanged(WebView view, int newProgress) {  
  102.             WebViewDemoActivity.this.getWindow().setFeatureInt(  
  103.                     Window.FEATURE_PROGRESS, newProgress * 100);  
  104.             super.onProgressChanged(view, newProgress);  
  105.         }  
  106.           
  107.         // 设置应用程序的标题  
  108.         @Override  
  109.         public void onReceivedTitle(WebView view, String title) {  
  110.             WebViewDemoActivity.this.setTitle(title);  
  111.             super.onReceivedTitle(view, title);  
  112.         }  
  113.     });  

你可能感兴趣的:(Android_WebView用法)