前言:
有时候我们可能会碰到一些比较特殊的需求,比如说要求在应用程序里展示一些网页。相信每个人都知道,加载和显示网页通常都是浏览器的任务,但是需求里又明确指出,不允许打开系统浏览器,而我们当然也不可能自己去编写一个浏览器出来,这时应该怎么办呢?
不用担心, Android 早就已经考虑到了这种需求,它提供了一个 WebView 控件来帮助我们做这件事情。
本节例程下载地址:WillFlowWebView
一、什么是WebView?
Android 内置了 webkit 内核的高性能浏览器(从 Android 4.4 以后是 Chromium),而 WebView 则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的把它看作一个可以嵌套到界面上的一个浏览器控件!借助它我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松地展示各种各样的网页。WebView 的用法也是相当简单,下面我们通过一个例子来学习一下。
(1)新建一个项目并修改 activity_main.xml 中的代码,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
我们在布局文件中使用到了 WebView,我们一会儿就用这个控件来显示网页,这里的写法很简单,给它设置了一个 id(android:id=”@+id/web_view”),并让它充满整个屏幕。
(2)然后修改 MainActivity 中的代码,如下所示:
public class MainActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.web_view);
// 设置WebView属性,运行执行js脚本
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); // 根据传入的参数再去加载新的网页
return true; // 表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器
}
});
wView.setWebChromeClient(new WebChromeClient() {
// 这里设置获取到的网站title
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
txt_title.setText(title);
}
});
webView.loadUrl("http://www.jianshu.com/p/2cf0aca9a57d");
}
// 我们需要重写回退按钮的时间,当用户点击回退按钮时:
// 1.webView.canGoBack()判断网页是否能后退,可以则goback()
// 2.如果不可以连续点击两次退出App,否则弹出提示Toast
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
if ((System.currentT