声明
欢迎转载,但请保留本文作译者和出处
水平有限,翻译不当之处欢迎雅正
序言: 本文位于Rsources/Tutorials/Hello Views/Web View
Web View
原文:http://developer.android.com/resources/tutorials/views/hello-webview.html
本文:http://blog.csdn.net/lonkiss/article/details/6645615
翻译:lonkiss & ❤Coco·Chanel❤
Web View
WebView 允许你创建一个自己的查看网页的视窗(甚至是开发一个完整的浏览器). 在此指南中, 你将建立一个可以浏览和导航网页的简单的Activity。
1、 创建一个名为 HelloWebView的项目
2、 打开 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" />
3、现在打开 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控件初始化Weview成员。用getSettings() 获得一个WebSettings 对象;并且使用setJavaScriptEnableed(boolean)为WebView启用javascript支持。 最后使用loadUrl(String)载入初始网页。
4、因为这个应用程序要访问因特网,你需要在Android manifest 文件中加入许可权限。打开 AndroidManifest.xml 文件,加入以下代码作为<manifest>元素的子元素
<uses-permission android:name="android.permission.INTERNET" />
5、在manifest中使用"NoTitleBar" 主题 可以通过移除标题栏为浏览网页得到更多空间:
<activity android:name=".HelloGoogleMaps" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
6、 现在启动应用程序
你现在有了一个简单的网页查看器,但它还不是一个真正的浏览器,因为当你点击一个链接的时候,android系统默认的浏览器会处理查看网页的意图,因为这个Activity还未在技术上提供支持去处理。
你可以重写WebViewClient类,并让这个Activity能处理它自己的URL请求,而不是添加一个Intent Filter去查看网页。
7、在HelloAndroid Activity中,加入这个内部类:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
8、然后前往onCreate(Bundle)方法的末尾,构建一个HelloWebViewClient实例作为WebViewClient
mWebView.setWebViewClient(new HelloWebViewClient());
这一行可以放在WebView对象初始化后的任何地方
这创建了一个可以加载任何一个在当前webView中选择的URL到当前webview的 WebViewClient。当前WebView和 请求的URL都传给了shouldOverrideUrlLoading(WebView, String)方法,它要做的就是在给定的视图中加载URL。返回true表示此方法已经处理了这个URL,事件不创建(否则 一个被系统默认浏览器应用程序处理的Intent会被创建)
如果你再次运行这个应用程序,新的页面将在这个Activity中加载。但是,你无法返回到先前的页面。为此,你需要处理设备上的BACK键,以致它能返回到之前的页面,而不是退出应用程序
9、处理BACK按钮被按事件,在HelloWebView Activity中加入以下代码
@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表明事件已经被处理完成,如果条件不成立,事件将被发回给系统。
10、再次运行应用程序,你现在可以打开连接和返回到浏览的历史页面。
当你打开出程序, 你将看到这个: