| page.title=Using WebViews |
| parent.title=Articles |
| parent.link=../browser.html?tag=article |
| @jd:body |
| |
| <p>A small application called <a title="WebViewDemo" |
| href="http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples |
| /WebViewDemo">WebViewDemo</a> shows how you can add web content to your |
| application. You can find it in the <a title="apps-for-android" |
| href="http://code.google.com/p/apps-for-android/">apps-for-android</a> project. |
| This application demonstrates how you can embed a {@link android.webkit.WebView} |
| into an activity and also how you can have two way communication between your |
| application and the web content. </p> |
| |
| <p>A |
| WebView uses the same rendering and JavaScript engine as the browser, |
| but it runs under the control of your application. The WebView can be |
| full screen or you can mix it with other Views. The content for your |
| WebView can come from anywhere. The WebView can download content from |
| the web, or it can come from local files stored in your assets |
| directory. The content can even be dynamically generated by your |
| application code. For this example, the HTML comes from a local file |
| called <a title="demo.html" href="http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/assets/demo.html">demo.html</a>.</p> |
| |
| <p>This application does not do very much: when you click on the |
| android, he raises his arm.</p> |
| |
| <div style="text-align: center;"><img style="width: 322px; height: 482px;" src="images/webview.png"></div> |
| |
| <p>This |
| could, of course, easily be accomplished with a little bit of |
| JavaScript. Instead, though, WebViewDemo takes a slightly more |
| complicated path to illustrate two very powerful features of WebView.</p> |
| |
| <p>First, |
| JavaScript running inside the WebView can call out to code in your |
| Activity. You can use this to have your JavaScript trigger actions like |
| starting a new activity, or it can be used to fetch data from a |
| database or {@link android.content.ContentProvider}. The API for this |
| is very simple: just call the |
| {@link android.webkit.WebView#addJavascriptInterface(java.lang.Object, java.lang.String) addJavascriptInterface()} |
| method on your WebView. You pass an object whose methods you want to |
| expose to JavaScript and the name to use when making calls. You can see |
| the exact syntax in <a title="WebViewDemo.java" |
| href="http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/ |
| WebViewDemo/src/com/google/android/webviewdemo/WebViewDemo.java">WebViewDemo. |
| java</a>. Here we are making our DemoJavascriptInterface object available to |
| JavaScript where it will be called "window.demo".</p> |
| |
| <p>Second, your Activity can invoke JavaScript methods. All you have to do |
| is call the {@link android.webkit.WebView#loadUrl(java.lang.String) loadUrl} |
| method with the appropriate JavaScript call:</p> |
| |
| <p><code style="padding-left: 25px;">mWebView.loadUrl("javascript:wave()");</code></p> |
| |
| <p>Our <a title="WebViewDemo" |
| href="http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples |
| /WebViewDemo">WebViewDemo</a> uses both techniques: when you click on the |
| android, it calls out to the activity, which then turns around and calls back |
| into the JavaScript. WebViews are very powerful, and they may be a valuable tool |
| to help you build your application – especially if you already have a lot of |
| HTML content. As it happens, we've used exactly this approach in some of the |
| applications we've written.</p> |