Web View
WebView允许你创建自己的窗口来浏览网页(甚至是开发一个完整的浏览器)。本教程里,你将创建一个简单的Activity,能够浏览和导航网页。
- 创建一个项目:HelloWebView.
- 修改
res/layout/main.xml
文件内容如下:<?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" />
- 打开
HelloWebView.java
,在类的顶部声明一个WebView
对象:WebView mWebView;
修改onCreate()方法如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("http://www.google.com"); }
通过Activity界面里的WebView元素来初始化成员WebView;调用getSettings()方法获得WebSettings对象,然后调用其
setJavaScriptEnabled(boolean)
方法设置WebView支持JavaScript。最后,调用loadUrl(String)方法加载一个初始网页。 - 因为这个应用要访问互联网,需要在Android manifest文件里设置相应的权限。打开
AndroidManifest.xml
文件,将下面的内容添加为节点<manifest>的元素:<uses-permission android:name="android.permission.INTERNET" />
- 同时在manifest文件里,给Activity设置"NoTitleBar"主题去除标题栏,为网页显示留出更大空间:
<activity android:name=".HelloGoogleMaps" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
- 运行应用。
你现在拥有一个最简单的页面浏览器,其实它还称不上一个真正的浏览器,一旦你点击一个链接,默认的Android浏览器会处理这个Intent并打开新的页面,因为这个Activity技术上还没有处理打开新链接的请求。除了添加一个intent filter来打开网页,你可以重写WebViewClient类来让Activity处理它自己的URL请求。
- 在类HelloWebView里面内嵌一个类:
private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }
- 在onCreate(Bundle)方法末尾,设置上面自定义的类
HelloWebViewClient
的实例作为WebViewClient:mWebView.setWebViewClient(new HelloWebViewClient());
这行代码让在初始WebView对象里面打开任何网页。
这行代码创建一个WebViewClient,让WebView对象自己加载自身被点击的URL。
重新运行应用,新页面也在当前Activity被加载。但是你不能返回先前打开的页面。为了实现这个功能,需要处理设备上的BACK按钮来回到前面的页面,而不是退出应用。
- 为了处理BACK按钮点击事件,在类HelloWebView里面添加下面的方法:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
在当前Activity里面,无论何时按下一个按钮,都会调用
onKeyDown(int, KeyEvent)
回调函数。条件语句使用KeyEvent来检查按下的是否是BACK按钮,并检查WebView是否真的能够返回上一个页面(是否有浏览历史)。如果两个条件都满足,就调用goBack()方法来返回WebView历史的上一步。返回true表示这个事件已经被处理过了。如果条件不满足,事件会被发送回系统。 - 重新运行应用。现在就能够在当前Activity打开新的连接,并能导航返回前面浏览的页面。
当打开应用,应该能看到如下画面: