android中webview的使用总结

WebView是Android中一个非常实用的组件,它和Safai、Chrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面。使用WebView开发软件有一下几个优点:
1.可以打开远程URL页面,也可以加载本地HTML数据;
2.可以无缝的在java和javascript之间进行交互操作;

3.高度的定制性,可根据开发者的需要进行多样性定制。

1.WebView

在使用WebView控件时,首先需要在xml布局文件中定义一个WebView控件,定义的方法如下:

    <WebView
        android:id="@+id/WebView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </WebView>
WebView中提供了很多方法,例如,我们可以使用canGoBack()方法判断是否能够从该网页返回上一个打开的网页;使用getTitle()和getUrl()方法获得当前网页的标题和URL路径;使用loadUrl(String url)方法加载所要打开的网页等等。如下的代码通过使用loadUrl()方法在WebView控件中打开了百度主页。

private WebView mWebView;
mWebView = (WebView)this.findViewById(R.id.webView);
mWebView.loadUrl("http://www.baidu.com/");// 本地文件用:webView.loadUrl(file:///android_asset/eoe.html);固定格式


2.WebSettings

WebSettings用来设置WebView的属性和状态。WebSettings和WebView存在于同一个生命周期中,可以使用如下的方法获得WebSettings对象。

  WebSettings webSettings = mWebView.getSettings();
   在创建WebView时,系统会对WebView进行一些默认设置,当我们通过以上的方法得到WebSettings对象后,便可以从WebSettings对象中取出WebView的默认属性和状态了,当然了,我们也可以通过WebSettings对象对WebView的默认属性和状态进行设置。
  WebSettings提供的一些常用的设置WebView的属性和状态的方法如下:
  (1)setAllowFileAccess(boolean allow);       //设置启用或禁止访问文件数据
  (2)setBuiltInZoomControls(boolean enabled);   //设置是否支持缩放
  (3)setDefaultFontSize(int size);            //设置默认的字体大小
  (4)setJavaScriptEnabled(boolean flag);       //设置是否支持JavaScript
  (5)setSupportZoom(boolean support);       //设置是否支持变焦
3.WebViewClient

WebViewClient主要用来辅助WebView处理各种通知、请求等事件。我们可以通过WebView的setWebViewClient()方法,为WebView对象指定一个WebViewClient,具体的实现方法如下所示:

    MyWebViewClient myWebViewClient = new MyWebViewClient();
  mWebView.setWebViewClient(myWebViewClient);
    private class MyWebViewClient extends WebViewClient {
        //重写父类方法,让新打开的网页在当前的WebView中显示
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
        
    }

      可以看到,在如上的代码中,我们通过在子类MyWebViewClient中重写父类WebViewClient的shouldOverrideUrlLoading()方法,实现了让新打开的网页在当前的WebView中进行显示,而不是调用Android系统自带的浏览器进行访问。

  在WebViewClient中同样提供了很多的方法,比如以下一些:

  (1)doUpdateVisitedHistory(WebView view, String url, boolean isReload);           //更新历史记录

  (2)onFormResubmission(WebView view, Message dontResend, Message resend);      //重新请求网页数据

  (3)onLoadResource(WebView view, String url);                       //加载指定网址提供的资源

  (4)onPageFinished(WebView view, String url);                        //网页加载完毕

  (5)onPageStarted(WebView view, String url, Bitmap favicon);               //网页开始加载

  (6)onReceivedError(WebView view, int errorCode, String description, String failingUrl);  //报告错误信息

4.WebChromeClient

WebChromeClient主要用来辅助WebView处理Javascript的对话框、网站图标、网站标题以及网页加载进度等。同样地,我们可以通过WebView的setWebChromeClient()方法,为WebView对象指定一个WebChromeClient。

在WebChromeClient中,当网页的加载进度发生变化时,onProgressChanged(WebView view, int newProgress)方法会被调用;当网页的图标发生改变时,onReceivedIcon(WebView view, Bitmap icon)方法会被调用;当网页的标题发生改变时,onReceivedTitle(WebView view, String title)方法会被调用。利用这些方法,我们便可以很容易的获得网页的加载进度、网页的标题和图标等信息了,正如下面的代码所示:

    MyWebChromeClient myWebChromeClient = new MyWebChromeClient();
    mWebView.setWebChromeClient(myWebChromeClient);
    
  /*
     * Class    :   用于辅助WebView,处理JavaScript的对话框、网站图标、网站标题、加载进度等
     */
    private class MyWebChromeClient extends WebChromeClient {
        
        //获得网页的加载进度,显示在右上角的TextView控件中
        public void onProgressChanged(WebView view, int newProgress) {
            if(newProgress < 100) {
                String progress = newProgress + "%";
                mTextView_progress.setText(progress);
            } else {
                mTextView_progress.setText(" ");
            }
        }
        
        //获得网页的标题,作为应用程序的标题进行显示
        public void onReceivedTitle(WebView view, String title) {
            MainActivity.this.setTitle(title);
        }
        
    }
5.WebView与Javascript

在WebView中不仅可以运行HTML代码,更重要的是,WebView可以与Javascript互相调用。也就是说,在Javascript中可以获取WebView的内容,与此同时,在WebView中也可以调用Javascript里面的方法。

  下面就来说说如何在WebView中调用Javascript里面的方法。

  在该接口中提供如下的Javascript方法:

    var city = new LocalSearch();   
    function findPlace(place)
    {
        city.search(place);
  }
我们要做的就是在WebView中调用findPlace()方法,完成地点的查找。在WebView中调用Javascript里面的方法是通过代码WebView.loadUrl(“javascript:方法名()”)来实现的。如下的代码,从EditText控件中获得用户想要查找的地名,然后调用了Javascript中的findPlace()方法,进行查找。

    /*
     * Function  :    点击事件处理
     */
    public void onClick(View view) {
        switch(view.getId()) {
        case R.id.search:                   
            String str = mEditText_input.getText().toString();
            String url = "javascript:findPlace('" + str + "')";
            mWebView.loadUrl(url);
            break;
        }
    }


6.处理返回键为返回上一页

如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件,覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法,代码如下:
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

7.设置android WebView 不显示滚动条

可以直接在layout中添加 android:scrollbars="none" 来设置不显示滚动条,如下:
<WebView
        android:id="@ id/wv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/bg"
        android:scrollbars="none" />

8.android:scrollbarStyle控制滚动条位置

WebView有一个设置滚动条位置的属性:android:scrollbarStyle 可以是insideOverlay可以是outsideOverlay,两个的区别是SCROLLBARS_INSIDE_OVERLAY的样式是滚动条在整个page里,类似css中的padding,看代码下的这个图吧,很清晰.
//mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);


9.重写shouldOverrideUrlLoading时指定url

指定只有url里包含baidu.com 的时候才在webview里打开,否则还是启动浏览器打开.
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
   Log.i(this, "url="   url);
    if ( url.contains("baidu.com") == true){
        view.loadUrl(url);
        return true;
    }else{
        Intent in = new Intent (Intent.ACTION_VIEW , Uri.parse(url));
        startActivity(in);
        return true;
    }
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值