WebView的基本使用

		
	
		WebView webview =new WebView(this);
		 //垂直不显示滚动条
 	    webview.setVerticalScrollBarEnabled(false); 
 	    
        //声明WebSettings子类
		WebSettings webSettings = webview.getSettings();
        //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);
        
        //设置自适应屏幕,两者合用
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        //缩放操作
        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
        //其他细节操作  缓存设置
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
        webSettings.setAllowFileAccess(false); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
		//允许http和https混合
		 webSettings.setPluginState(WebSettings.PluginState.ON);
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }   
         webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
		 webSettings.setSavePassword(false);//不保存账号密码
		//加载网页标签代码
		webView.loadDataWithBaseURL("about:blank", data.getSoftContent(), "text/html", "utf-8", null);
		//加载网页
		webView.loadYrl("");

		//设置显示方式
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

				if (url.toLowerCase().startsWith("http") || url.startsWith("https:")) {
                    return false;
                }
                if (url.startsWith("intent") || url.startsWith("youku")) {
                    return true;
                }
				//支付  拨打电话
 				if (url.startsWith("weixin://") || url.startsWith("alipay") || url.startsWith("tel:")) {

                    try{
                        view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    }catch (Exception e){
                        ToastHelper.showToast("您的设备不支持该操作",WebViewActivity.this);
                        e.printStackTrace();
                    }

                    return true;
                }

                //在本窗口显示网页,隐藏地址栏
                view.loadUrl(url);
                //以网页形式显示
             //  Uri uri = Uri.parse(url);
             //  Intent intent = new Intent(Intent.ACTION_VIEW, uri);
             //  startActivity(intent);
                
                return false;
            }

 			@Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                // 接受证书
                handler.proceed();
            }
        });

		
    }

	//点击返回返回上一层的网页,无上一层就关闭窗体
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    //避免内存溢出,关闭窗体时也要销毁webview
    @Override
    protected void onDestroy() {
        if (webview != null) {
            webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            webview.clearHistory();
            ((ViewGroup) webview.getParent()).removeView(webview);
            webview.destroy();
            webview = null;
        }
        super.onDestroy();
    }

js交互

public class AndroidtoJs  extends Object  {

    private Context context;

    public AndroidtoJs(Context context) {
        super();
        this.context = context;
    }

    @JavascriptInterface
    public String onGetPhone(){
        Log.i("onGetPhone:","js调用Android方法");
        return "00000";
    }
}

提供js调用的接口

		if (Build.VERSION.SDK_INT >= 17) {
            // 在sdk4.2以上的系统上继续使用addJavascriptInterface
             AndroidtoJs androidtoJs = new AndroidtoJs(this);
  			webView.addJavascriptInterface(androidtoJs, "android");
        } else {
            //4.2之前 addJavascriptInterface有安全泄漏风险
            //移除js中的searchBoxJavaBridge_对象,在Android 3.0以下,系统自己添加了一个叫 
            //searchBoxJavaBridge_的Js接口,要解决这个安全问题,我们也需要把这个接口删除
            webView.removeJavascriptInterface("searchBoxJavaBridge_");
        }
 

说明:4.2之前 addJavascriptInterface有安全泄漏风险,这是谷歌官方给出的方案

js调用方法

android.onGetPhone();