WebView入门

webview是Android展示网页信息的控件,本文就来详细讲解这个控件的用法。虽说是详细讲解,但也仅仅是提供入门使用,对于很多高级要求,这里暂不涉及。

 

一、初识webview

 

1.1 放入自己的工程

使用控件仍旧是老样子,在xml中写入,在java中找到控件并进行处理。此外还要记得加访问网络的权限。

<uses-permission android:name="android.permission.INTERNET" /> 

xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true" />

</RelativeLayout>

Java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.baidu.com/");
}

 

这样其实就可以运行啦,但是你在运行的时候会发现程序启动后会有下面的界面

技术分享

也就是说这个控件当前没有自己展示网页的能力,还需要调用浏览器来实现。

 

二、WebView的方法

 

2.1 加载特定网页

webView.loadUrl("http://www.baidu.com/");

 

2.2 加载本地的html文件

现将本地文件放入asset中,然后用下面的方法加载

webView.loadUrl("file:///android_asset/XX.html");  

 

2.3 加载html字符串

String htmlString = "<h1>Title</h1><p>This is HTML text<br /><i>Formatted in italics</i><br />Anothor Line</p>";
// 载入这个html页面
webView.loadData(htmlString, "text/html", "utf-8");

 

2.4 加载指定的url并携带http header数据

public void loadUrl (String url, Map<String, String> additionalHttpHeaders) 

 

2.5 重新加载

注意:所有资源都会重新加载,慎用

public void reload ()  

 

2.6 结束加载

public void stopLoading () 

 

2.7 前进或后退到指定点

以当前的index为起始点前进或者后退到历史记录中指定的steps,  如果steps为负数则为后退,正数则为前进

public void goBackOrForward (int steps) 

 

更多的API请参考这篇博文:http://blog.csdn.net/typename/article/details/39030091

 

三、使用WebViewClient

webview可以设置一个webviewclient对象,通过它就可以来进行网页加载的处理了。

 

3.1 shouldOverrideUrlLoading

shouldOverrideUrlLoading并不是每次都在onPageStarted之前开始调用的,就是说一个新的URL不是每次都经过shouldOverrideUrlLoading的,只有在调用webview.loadURL的时候才会调用。而设置loadUrl时候是用哪个浏览器来加载。
     WebView webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.baidu.com/");
    webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    }

如上面展示的,webview首先调用loadURL方法,然后webviewClient触发了加载url的方法,然后将展示网页的工作自己承担了下来。重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。

如果你想要webview屏蔽某个网站的超链接,或者是要对某些特殊的url进行处理,那么就需要在这里进行修改啦。屏蔽连接的话,直接返回true即可,如果要进行url判断,可以如下操作

if (url.endsWith(".apk")) {
     download(url);//下载处理
}

 

3.2 onLoadResource

在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。如下的load会在网页加载元素时调用很多次。

        @Override
            public void onLoadResource(WebView view, String url) {
                // TODO 自动生成的方法存根
                super.onLoadResource(view, url);
                System.out.println("load");
            }    

 

3.3 onPageStarted & onPageFinished

网页开始加载和结束加载时调用,一般的过程就是onpageStarted->onLoadResource->onPageFinished

        @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO 自动生成的方法存根
                super.onPageStarted(view, url, favicon);
                Log.i(TAG, "onPageStarted");
            }

            
            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO 自动生成的方法存根
                super.onPageFinished(view, url);
                Log.i(TAG, "onPageFinished");
            }

 

四、处理前进和后退操作

我们应该对webview进行前进和后退的处理,需要在activity的按键时间中处理。这样我们就能通过手机的返回键进行网页的返回了。

  public boolean onKeyDown(int keyCoder, KeyEvent event) {
        /**
         * canGoBack()检查是否有可以后退的记录
         * anGoForward()方法可以检查是否有可以前进的历史记录。
                如果你不执行这种检查,一旦 goBack() 和 goForward()方法到达历史记录顶端,它们将什么也不做。
         */
        if (webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK) {
            //webView.goForward(); // 前进
            webView.goBack(); // goBack()表示返回webView的上一页面,后退
            return true;
        }
        return false;
    }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。