Android中 "WebView"的使用

来源:互联网 发布:linux运行级别介绍 编辑:程序博客网 时间:2024/05/21 11:26

很多知识点还是得总结总结,尽管用过多次,没总结就注定得忘记

  • 1.”WebView” 加载的监听:

    WebView.setWebViewClient(new WebViewClient(){    /**页面开始加载的时候调用的方法*/    @Override    public void onPageStarted(WebView v,String url,Bitmap favicon){        super.onPageStarted2(v,url,favicon);        //....        mLoading.setVisibility(View.VISIBLE);    }    /**页面结束的时候调用的方法*/    @Override    public void onPageFinished(WebView view,String url){        super.onPageFinished();        mLoading.setVisibility(View.INVISIBLE);    }    /网页加载失败时调用,隐藏加载提示旋转进度条    @Override    public void onReceivedError(WebView view, int errorCode,            String description, String failingUrl) {        super.onReceivedError(view, errorCode, description, failingUrl);        progressBar.setVisibility(android.view.View.GONE);    }           @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {      // 注意:当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器      //要返回true,就得加view.loadUrl(url);否则网页链接无法跳转      //除非需求是不让网页上的链接被点击的时候执行跳转      view.loadUrl(url);        return true;    }   });
  • 2.”WebView” 加载网页

    WebView.loadUrl(url);// 载入这个html页面WebView.loadData(htmlString, "text/html", "utf-8"); //显示文字与图片内容 (模拟器1.5、1.6)  webView.LoadDataWithBase(String baseUrl, String data,    String mimeType, String encoding, String historyUrl);   //显示文字与图片内容(支持多个模拟器版本) 示例:    String baseURL = "file:///mnt/sdcard/";         //根URL      String html = "<html><body>"              + "<h3>image from sdcard:<h3><br/>"              + "<img src='webview_capture.jpg' style='border:2px solid #FF0000;'/>"               + "</body></html>";  //加载相对于根URL下的数据,historyUrl设为null即可  webView.loadDataWithBaseURL(baseURL, html, "text/html", "utf-8", null);  
  • 3.”WebView” 设置页面字体大小

    WebSettings webSettings = WebView.getSettings();//设置字体大小webSettings.setTextSize(TextSize.LARGER);webSettings.setTextSize(TextSize.LARGEST);webSettings.setTextSize(TextSize.NORMAL);webSettings.setTextSize(TextSize.SMALLER);
  • 4.”WebView” 设置JS可用

    WebSettings webSettings = WebView.getSettings();webSettings.setJavascriptEnabled(true);
  • 5.”WebView” 设置支持缩放

    WebSettings webSettings = WebView.getSettings();//设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放,需要和"setBuiltInZoomControls一起使用"settings.setSupportZoom(true);                      //是否使用其内置的变焦机制,默认false,不使用webSettings.setBuiltInZoomControls(true);           //设置WebView是否显示缩放显示(+ -)按钮,默认true,使用的       webSettings.setDisplayZoomControls(false);        webSettings.setUseWideViewPort(true);               //支持双击缩放(wap网页不支持)
  • 6.”WebView” 设置禁止浏览器打开,只许在WebView打开网页

    webView.setWebChromeClient(new WebChromeClient(){    @Override    public void onReceivedTitle(WebView v,String title){        super.onReceivedTitle(v,title);        //title 为WebView网页的标题    }    @Override    public void onProgressChanged(WebView view,int newProgress){        super.onProgressChanged(view,newProgress);        //newProgress 为网页被加载的进度    }});
  • 7.”WebView” 设置前进后退

    api:    WebView.canGoBack();    //判断webView是否可后退    WebView.goBack();       //WebView当前的网页后退    WebView.canGoForward(); //判断webView是否可前进    WebView.goForward();    //WebView当前的网页前进
  • 8.”WebView” 设置加载缓存模式,当网页支持缓存的时候缓存才能起效果

    WebSettings webSettings = WebView.getSettings();WebSettings.LOAD_CACHE_ELSE_NETWORK     //先加载缓存再从网络加载WebSettings.LOAD_CACHE_ONLY             //只加载缓存WebSettings.LOAD_NO_CACHE               //不加载缓存webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);缓存在本地的数据可以通过代码设置进行清除操作WebView.clearCache(true);另一种方式:        File file = CacheManager.getCacheFileBaseDir();        if(file!=null && file.exists() && file.isDirectory()){            for(File item:file.listFiles()){                item.delete();            }            file.delete();        }//删除数据库context.deleteDatabase("webview.db");context.deleteDatabase("webViewCache.db");
  • 9.Js调用Android代码

    注意:    将demo.html导入到资产目录assets中,在onCreate()方法中直接使用webView加载本地Html,这    里要注意本地路径是android_asset。本地创建一个接口onJSCallAndroid,设置一个抽象方法    onCallback(),这个方法名是与js中设置的方法名相对应的,WebView通过    addJavaScriptInterface()方法就可以实现js调用android代码了,它需要传2个参数,第一个    刚定义的接口,第二个是要与js中对应的对象名字"demo"    webview.loadUrl("file:///android_asset/demo.html");    //添加一个js接口    //第一个参数表示添加的接口    //第二个参数,表示接口的第二个名字一致    webView.addJavascriptInterface(new onJSCallAndroid(){        //onCallback必须和接口的第三个参数名字一致        @JavascriptInterface        //注意:此处一定要加该注解,否则在4.1+系统上运行失败        @Override        public void onCallback(){            Toast.makeText(getApplicationContext(),"js调用android代码",0).show();        }        }    },"demo");    /**js调用android代码*/    public interface onJSCallAndroid(){        public void onCallback();    }/**demo.html*/<html>    <head>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    </head>    <script language="javascript">        function wave(){            alert("Android调用JS");        }    </script>    <body>        <!--Js调用Android代码-->        <a onClick="window.demo.onCallback()"></a>   //注意这里调用的名称与上面的一致    </body></html>
  • 10.android调用js代码

    api:    webView.loadUrl("javascript:wave()");
  • 11.webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。

    api:    webview.requestFocusFromTouch();    requestFocus();                     // 触摸焦点起作用
  • 12.注意:

    webView与js的交互中,涉及到的提供给js去调用的接口类不能混淆,否则会导致找不到而报错,将as中的proguard-rules.pro文件下面这行注释打开,包名进行替换即可-keepclassmembers class com.test.webview.DemoJavaScriptInterface$onJSCallAndroid{   public *;}高版本需加上-keepattributes *Annotation*  -keepattributes *JavascriptInterface*
  • 13.参考Url

    http://blog.csdn.net/liuhe688/article/details/6549263http://blog.csdn.net/chenshijun0101/article/details/7045394http://teachcourse.cn/android-webview-websettings
0 0