首页 > 代码库 > Android WebView

Android WebView

 

  1. 描述
    • WebView是Android系统中内置了的一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。 
  2. 用途
    • 应用内嵌浏览器,并显示网页内容。
    • android 自带的 textview 不支持长按文本复制,webview 自带长按复制文本内容的功能。
    • 应用在内容显示上,对动画的丰富性要求较高,可以使用 webview 加载支持javascript的网页显示动画内容。
  3. 所需应用权限
    • AndroidManifest.xml 需要添加 "android.permission.INTERNET"权限。
  4. 开发相关
    • XML文件中显示webview组件。
      1     <WebView2         android:id="@+id/webView"3         android:layout_width="match_parent"4         android:layout_height="match_parent"/>

       

    • 加载内容
      1 webView.loadUrl(url);2 webView.loadUrl(url, extraHeaders);3 webView.loadData(data, mimeType, encoding);4 webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);

       

    • 设置属性
      1 WebSettings setting = webView.getSettings();2 setting.setSupportZoom(true);//支持缩放3 setting.setTextSize(TextSize);//页面中字体大小 --TextSize.LARGER4 setting.setJavaScriptEnabled(true);//对javascript的支持

       

    • webview显示网页的前进与后退
       1 webView.canGoBack(); 2 webView.goBack(); //后退 3 webView.canGoForward(); 4 webView.goForward(); //前进 5  6 //ps:使用webview浏览网页,点击系统“Back”键会finish()activity,因此 7 //需要拦截返回键的监听 8 public boolean onKeyDown(int keyCode, KeyEvent event) {        9         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       10             webView.goBack();       11                    return true;       12         }       13         return super.onKeyDown(keyCode, event);       14     }     

       

    • 当网页中有链接时,如果希望不点击链接继续在当前webview里面显示内容,而不是打开系统浏览器或者第三方浏览器,需要设置WebViewClient属性。
      1 webView.setWebViewClient(new WebViewClient(){       2                     public boolean shouldOverrideUrlLoading(WebView view, String url) {       3                         view.loadUrl(url);       4                         return true;       5                     }       6         });

       

    • 监听页面中javascript中的简单事件
       1 //demo.html 2 <html>        3   <mce:script language="javascript"><!--      4         5       function wave() {        6           document.getElementById("droid").src="http://www.mamicode.com/android_waving.png";        7       }        8               9 </mce:script>       10       <body>       11       <a onClick="window.demo.clickOnAndroid()">       12           <img id="droid" src="http://www.mamicode.com/android_normal.png" mce_src="http://www.mamicode.com/android_normal.png"/><br>       13               Click me!       14       </a>       15       </body>       16 </html> 17 18 //android代码19 public class WebViewDemo extends Activity {        20     private WebView mWebView;       21     private Handler mHandler = new Handler();       22        23     public void onCreate(Bundle icicle) {       24         super.onCreate(icicle);       25         setContentView(R.layout.webviewdemo);       26         mWebView = (WebView) findViewById(R.id.webview);       27         WebSettings webSettings = mWebView.getSettings();       28         webSettings.setJavaScriptEnabled(true);       29         mWebView.addJavascriptInterface(new Object() {       30             public void clickOnAndroid() {//html中的方法       31                 mHandler.post(new Runnable() {       32                     public void run() {       33                         mWebView.loadUrl("javascript:wave()");       34                     }       35                 });       36             }       37         }, "demo");       38         mWebView.loadUrl("file:///android_asset/demo.html");       39     }       40 }

       

      1、为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html" 
      2、addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。

    • 对html5视频播放及全屏的支持,需要自定义WebChromeClient,重写onShowCustomView(),和onHideCustomView()方法。

 

 

 

     

 

 

  

  

Android WebView