如果要提供一个Web应用程序(或只是一个网页),为客户端应用程序的一部分,可以使用web视图做到这一点。 web视图类是Android的View类的扩展,使您可以显示网页作为你的活动布局的一部分。它不包括一个充分开发的web浏览器的任何功能,如导航控件或地址栏。所有的web视图确实,在默认情况下,是显示网页。
一个常见的​​场景中使用的WebView是有帮助的是,当你要提供你的应用程序,您可能需要更新,如最终用户协议或用户指南信息。在你的Andr​​oid应用程序,你可以创建一个包含web视图的活动,然后用它来显示的在线托管您的文档。
在web视图可帮助另一种情况是,如果你的应用程序提供的数据总是需要Internet连接来获取数据,如电子邮件用户。在这种情况下,你可能会发现它更容易在你的Andr​​oid应用程序,它显示了所有用户数据的网页,而不是执行网络请求,然后分析其数据,并在Android的布局使得它打造的WebView。相反,你可以设计一个网页的Andr​​oid设备量身定制的,然后在加载网页的Andr​​oid应用程序实现的WebView。
本文将向您展示如何开始使用的WebView以及如何做一些额外的事情,比如手柄页面导航,并从你的网页在你的Andr​​oid应用程序绑定到的JavaScript客户端代码。
添加的WebView到您的应用程序

到的WebView添加到您的应用程序,只需在你的活动布局<web视图>元素。例如,下面是其中的WebView填满整个屏幕布局文件:

<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/webview"  android:layout_width="fill_parent"  android:layout_height="fill_parent"/>
以在web视图加载网页,用于使用loadURL()。 例如:

WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");
在此之前将工作,但是,你的应用程序必须能够访问互联网。为了获得互联网接入,请求在你的清单文件INTERNET权限。 例如:

<manifest ... >  <uses-permission android:name="android.permission.INTERNET" />  ...</manifest>
这就是你需要一个显示网页的基本看法。
在WebView中使用JavaScript
如果网页你计划在你的WebView加载使用JavaScript,您必须启用JavaScript,为您的WebView。一旦启用JavaScript,你还可以创建你的应用程序代码和JavaScript代码之间的接口。
启用JavaScript
JavaScript在默认情况下禁用的WebView。您可以通过连接到您的WebView的WebSettings启用它。你可以检索的getSettings()WebSettings,然后启用JavaScript的setJavaScriptEnabled()。
例如:

WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);
WebSettings提供了访问各种其他设置,您可能会发现有用。例如,如果你正在开发一个专门针对你的Andr​​oid应用程序的WebView中专门设计了一个Web应用程序,那么你可以定义setUserAgentString()的自定义用户代理字符串,然后查询自定义用户代理在您的网页,以验证客户端请求你的网页实际上是你的Andr​​oid应用程序。


结合JavaScript代码到Android代码


当开发对web视图专门设计的Andr​​oid应用程序的Web应用程序,你可以创建你的JavaScript代码和客户端的Andr​​oid代码之间的接口。比如,你的JavaScript代码可以在你的Andr​​oid代码,以显示一个对话框调用,而不是使用JavaScript的警报()函数的方法。


要绑定你的JavaScript和Android代码之间一个新的接口,调用addJavascriptInterface(),传递一个类的实例绑定到你的JavaScript和你的JavaScript可以调用访问类的接口名称。


例如,您可以在您的Andr​​oid应用程序下面的类:

public class WebAppInterface {  Context mContext;  /** Instantiate the interface and set the context */  WebAppInterface(Context c) {    mContext = c;  }  /** Show a toast from the web page */  @JavascriptInterface  public void showToast(String toast) {    Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();  }}
注意:如果你已经设置你的targetSdkVersion到17或更高,则必须将@JavascriptInterface注释添加到您希望提供给您的JavaScript(该方法也必须是公共的)任何方法。如果你不提供批注,在Android4.2或更高版本上运行时的方法不是通过网页访问。
在这个例子中,Web应用程序接口类允许网页创建一个吐司消息,使用showToast()方法。
您可以将这个类绑定到,在与addJavascriptInterface您的WebView运行的JavaScript()和命名接口的Android。 例如:

WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(this), "Android");
这将创建一个叫做Android在WebView中运行的JavaScript的接口。在这一点上,Web应用程序可以访问Web应用程序接口类。例如,这里的一些HTML和JavaScript创建使用新界面,当用户点击一个按钮举杯消息:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /><script type="text/javascript">  function showAndroidToast(toast) {    Android.showToast(toast);  }</script>
有没有必要从JavaScript初始化Android界面。该自动网页视图使得其提供给您的网页。于是,在点击按钮时,showAndroidToast()函数使用Android界面来调用Web应用程序Interface.showToast()方法。
注:绑定到你的JavaScript对象在另一个线程中运行,而不是在它构建线程。
注意:使用addJavascriptInterface()允许JavaScript来控制你的Andr​​oid应用程序。这是一个非常有用的功能或危险的安全问题。当在WebView中的HTML是不可信的(例如,部分或全部HTML是由一个不知名的人或进程提供),那么攻击者可以包含HTML的执行你的客户端代码和攻击者选择的可能的任何代码。因此,你不应该使用addJavascriptInterface(),除非你写的所有出现在你的WebView的HTML和JavaScript。你也应该不允许用户导航到其他网页,是不是你自己的,你的WebView内(而不是,让用户的默认浏览器应用程序打开国外的联系,在默认情况下,用户的Web浏览器中打开所有的URL链接,所以如以下部分所述小心只有当你处理页面导航)。
处理页面导航
当用户点击从网页​​中的网页视图链接,默认行为是为Android推出处理的URL的应用程序。通常情况下,默认的Web浏览器中打开并加载目标网址。但是,您可以覆盖这个行为为您的WebView,所以你的链接的WebView中打开。然后,您可以允许用户向后导航,并通过该公司由您的WebView维护他们的网页历史前进。
要打开用户点击链接,只需提供您的WebView一个WebViewClient,使用setWebViewClient()。例如:

WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new WebViewClient());

现在,所有的链接用户点击加载的网页视图。


如果你想在其中点击链路负载,创建你自己的WebViewClient覆盖shouldOverrideUrlLoading()方法更多的控制。 例如:

private class MyWebViewClient extends WebViewClient {  @Override  public boolean shouldOverrideUrlLoading(WebView view, String url) {    if (Uri.parse(url).getHost().equals("www.example.com")) {      // This is my web site, so do not override; let my WebView load the page      return false;    }    // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));    startActivity(intent);    return true;  }}
之后创建的WebView这个新WebViewClient的实例:

WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new MyWebViewClient());
现在,当用户点击一个链接时,系统调用shouldOverrideUrlLoading(),它检查URL主机是否特定的域匹配(如上定义)。如果匹配,则该方法返回false为了不重写URL加载(它允许的WebView加载URL照常)。如果URL主机不匹配,那么目的是创建启动默认的活动处理的URL(其解析为用户的默认Web浏览器)。
浏览网页历史记录
当你的WebView覆盖网址加载,它会自动累计访问的网页的历史记录。您可以导航落后,通过历史与转发返回()和前进()。
例如,这里是你的活动如何使用设备后退按钮向后导航:

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {  // Check if the key event was the Back button and if there's history  if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {    myWebView.goBack();    return true;  }  // If it wasn't the Back key or there's no web page history, bubble up to the default  // system behavior (probably exit the activity)  return super.onKeyDown(keyCode, event);}
如果确实有网页历史记录用户访问的canGoBack()方法返回true。同样,你可以使用canGoForward()来检查是否有前进的历史。如果不执行此检查,那么一旦用户到达历史的终结,返回()或前进()什么都不做。

更多相关文章

  1. Android(安卓)API Guides---Supporting Multiple Screens
  2. Mac下无线调试Android应用程序
  3. Android(安卓)API Guides---Media Router
  4. Windows phone开发初体验之(四)-处理Windows Phone 中的方向更改
  5. 提升Android应用开发性能的十大要点(1)
  6. Android(安卓)总结:Manifest文件中,application和activity标签属
  7. 关于手机网页viewpoint缩放适配各种机型各种浏览器的总结
  8. Android(安卓)Scroll分析(一)
  9. Android(安卓)API 中文 (5) —— 使用平台的样式和主题

随机推荐

  1. [置顶] 关于android:lineSpacingExtra属
  2. android 计划任务(Alarm,Timer,Thread,handle
  3. android中px,dp,sp的区别与使用方法
  4. Android核心分析 之一--------分析方法论
  5. Python入门(一)——环境的搭建,创建第一个
  6. android android:exported属性的使用
  7. 2012.5.2微博热报:Android版本混乱、网站
  8. Android 界面滑动实现---Scroller类 从源
  9. Android之场景桌面(一)
  10. Android 职业路上--只要还有一丝希望,不