Bootstrap

WebView加载本地加载网络资源

Android webview使用详解
1. 打开网页时不调用系统浏览器, 而是在本WebView中显示:


复制代码
mWebView.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
          return true;
      }
  });
复制代码
2. 通过java代码调用javascript


复制代码
WebSettings webSettings =   mWebView .getSettings();       
webSettings.setJavaScriptEnabled(true); 
mWebView.addJavascriptInterface(new Object() {       
            public void clickOnAndroid() {       
                mHandler.post(new Runnable() {       
                    public void run() {       
                        webview.loadUrl("javascript:wave()");       
                    }       
                });       
            }       
        }, "demo"); 
复制代码
3. 按返回键时, 不退出程序而是返回上一浏览页面:


复制代码
public boolean onKeyDown(int keyCode, KeyEvent event) {       
        if ((keyCode == KeyEvent.KEYCODE_BACK) &&   webview.canGoBack()) {       
            webview.goBack();       
                   return true;       
        }       
        return super.onKeyDown(keyCode, event);       
    }
复制代码
4. 打开页面时, 自适应屏幕:


WebSettings webSettings =   mWebView .getSettings();       
webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放
webSettings.setLoadWithOverviewMode(true);
5. 便页面支持缩放:


WebSettings webSettings =   mWebView .getSettings();       
webSettings.setJavaScriptEnabled(true);  
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
6.如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。


webview.requestFocusFromTouch();
7.WebView 加载界面主要调用三个方法:LoadUrl、LoadData、LoadDataWithBaseURL. 


1、LoadUrl            直接加载网页、图片并显示.(本地或是网络上的网页、图片、gif)  
2、LoadData           显示文字与图片内容 (模拟器1.5、1.6)  
3、LoadDataWithBase  显示文字与图片内容(支持多个模拟器版本) 
8.WebSettings 的常用方法介绍


复制代码
setJavaScriptEnabled(true);  //支持js


setPluginsEnabled(true);  //支持插件 


setUseWideViewPort(false);  //将图片调整到适合webview的大小 


setSupportZoom(true);  //支持缩放 


setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局  


supportMultipleWindows();  //多窗口 


setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存 


setAllowFileAccess(true);  //设置可以访问文件 


setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点


webview webSettings.setBuiltInZoomControls(true); //设置支持缩放 


setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 


setLoadWithOverviewMode(true); // 缩放至屏幕的大小


setLoadsImagesAutomatically(true);  //支持自动加载图片
复制代码
9.WebViewClient 的方法全解


复制代码
doUpdateVisitedHistory(WebView view, String url, boolean isReload)  //(更新历史记录) 


onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据) 


onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 


onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 


onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 


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


onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求) 
 
onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。
 
onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用) 


onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用) 


shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。 


shouldOverrideUrlLoading(WebView view, String url) 

//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。



1.webview布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
    </WebView>
</LinearLayout>

2.MyActivity.class文件

package com.ncsyeyy.WebViewDemo;

import android.app.Activity;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import java.net.URLEncoder;

public class MyActivity extends Activity {
    /**
     * WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用。
     webview有两个方法:setWebChromeClient setWebClient
     setWebClient:主要处理解析,渲染网页等浏览器做的事情
     setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等
     WebViewClient就是帮助WebView处理各种通知、请求事件的。
     * 1webview支持页面缩放,一般通过以下设置就可满足80%的要求
     //缩放开关
     webView.getSettings().setSupportZoom(true);
     设置此属性,仅支持双击缩放,不支持触摸缩放(在android4.0是这样,其他平台没试过)
     // 设置是否可缩放
     webView.getSettings().setBuiltInZoomControls(true);
     如果设置了此属性,那么webView.getSettings().setSupportZoom(true);也默认设置为true
     2、无限缩放
     无限缩放,就需要使用大视图模式,如下:
     //无限缩放
     webView.getSettings().setUseWideViewPort(true);设置此属性,可任意比例缩放。
     注:1、初始缩放值可这样设置:webView.setInitialScale(initalValue);
     2、缩放后,要使内容适配屏幕,不超出屏幕外显示,实现换行。这方面效果应该由html控制,而不是webview控制。
     例如<p style="word-break:break-all">test</p>实现自动换行。
     */

    private WebView webView;

    @SuppressLint("SetJavaScriptEnabled")

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webView = (WebView) findViewById(R.id.webview);
        WebSettings webSettings=webView.getSettings();
//        设置WebView属性,能够执行JavaScript脚本
        webSettings.setJavaScriptEnabled(true);
//        设置可以访问的文件
        webSettings.setAllowFileAccess(true);
//        设置是否支持缩放
        webSettings.setBuiltInZoomControls(true);

//        webView.getSettings().setBuiltInZoomControls(true);
//        缩放开关
        webSettings.setSupportZoom(true);
        webSettings.setUseWideViewPort(true);//可以任意比例缩放
        webSettings.setPluginState(WebSettings.PluginState.ON);
        webView.setSaveEnabled(true);//支持插件
        //使用localStorage(本地存储)则必须打开
        webSettings.setDomStorageEnabled(true);

//        加载需要显示的网页本地,网络都可以,只需要把地址换一下即可
        webView.loadUrl("file:///sdcard/ebook/mntusadmin/935867ec1f094f4e900a9920c4822e79/quiz/data/a14c682cab7a4d72b3296f4d14fd59fd/index.html?user_id=226e56111f8949329623a4dfc539dc51&client_type=android&style_type=Formative&Authorization=mntusadmin|6efbd902c18cfc84701d3bf915bcfc012fb1e7d258204b5b136e23e968fc877b7922572d7a6e08b339acfc2b34c3c9b5675c45cafa137211e9f07429636dea91&Language=zh-CN&admin_flag=Y");
//        打开网页时不调用系统浏览器,二十在本webview中显示设置web视图
        webView.setWebViewClient(new webViewClient());

    }

//设置回退,覆盖activity类的onKeyDown(int keyCode,KeyEvent event)方法
//   按返回键是,不退出程序而是返回上一浏览页面
    @Override
    public boolean onKeyDown(int keyCode,KeyEvent event){
if ((keyCode==KeyEvent.KEYCODE_BACK)&&webView.canGoBack()){
    webView.goBack();
    return true;
}
        finish();
        return false;
    }
    //Web视图
    private class webViewClient extends WebViewClient {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
            return true;
        }
    }
}
3.AndroidManifest.xml权限的配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.ncsyeyy.WebViewDemo"
          android:versionCode="1"
          android:versionName="1.0">
    <uses-sdk android:minSdkVersion="18"/>
    <!--添加访问网络权限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 允许应用访问精确(GPS)性的定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!--允许应用访问范围(WIFI)性的定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <activity android:name="MyActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

资源下载:http://download.csdn.net/detail/csdnyuandaimaxuexi/8968079


;