WebView的使用

2017-11-24  本文已影响0人  Funny灬

WebView的基本使用

1.加载本地的assets目录下的html文件 
    wv.loadUrl("file:///android_asset/hm47.html")
2.加载网络的html文件,如果自身client打开需要设置WebViewClient
    wv.loadUrl("http://bbs.itheima.com");
3.监听加载进度,可以用来显示进度条进度
    wv.setOnWebChromeClient(){
        onProgressChanged(WebView view,int progress);
    }
4.监听加载完成,可以显示和隐藏进度条
    wv.setWebViewChilent(){
        //开始加载
        onPageStarted()
        //加载完成
        onPageFinished();
    }
5.设置不跳到我们的内置浏览器
    mv.setWebViewChilent(){
         @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
    
6.webView的回退操作
   重写onKeyDown,当为返回键并且webview可以回退的时候,调用webview的回调,否则直接finish
   public boolean onKeyDown(int keyCode, KeyEvent event) { 
          if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { 
              wv.goBack(); //goBack()表示返回WebView的上一页面 
              return true; 
          } 
          return false; 
    }   
    
7.设置允许代码中有js操作
    setting = wv.getSettings();
    setting.setJavaScriptEnabled(true);

8.设置字体的大小
    setting.setTextSize(Textsize.Larger);

WebView的中级使用

1.java中调用js代码
    String js = "alert('加油')";
    mv.loadUrl("javascript:"+js);
2.js中调用java
    1,在android定义一个类,在类中中定义要在js中调用的方法,要添加@JavascriptInterface注释
    2,在html中的script中调用该方法
    window.object.method();
    3,在方法中可以传递字符串,也可以传递json,但是传json前,要将json转为字符串

WebView的高级使用

js,css放在本地assets目录
1.请求的时候,只需要返回核心的数据(body title author pubtime),而不是一个简单的url
2.根据核心具体,拼接本地的css/js,形成最终的网页内容
3.使用loadDataWithBaseURL去加载拼接之后的网页,而不是通过loadurl

优化网页加载速度

设置WebView, 先禁止加载图片
覆写WebViewClient的onPageFinished()方法, 页面加载结束后再加载图片

Android和JS交互

1.写一个H5和Android通信桥梁类JavaScripteMethod ,管理所有H5和Android通信。这里面的方法用来给 JS调用(比如写一个showToast方法),需要加一个注解@JavascriptInterface,保证安全问题,防止JS通过反射调用Android中的其他方法。
2.设置H5和android通信的接口 
3.JS端调用Android方法:window.映射字符串.方法名 
    var json = {"message" : "你好,我是JS", "name" : "js"};
    window.jsInterface.showToast(Json.stringify(json));

JS callback式回调Android
网络请求由Android端来做。JS不用再用ajax来做网络请求,直接回掉Android端即可,减少重复的网络请求工作 
1、先主动调用android
window.jsInterface.getHotelData()
2、android回掉JS,
android调用JS中的方法,必须要放在主线程中执行 
android调用JS中的方法,这个JS的方法名不要写死,而是解析JS传过来的json数据,得到方法名,这样就可以降低耦合
上一篇下一篇

猜你喜欢

热点阅读