Android里WebView详解(一)

WebView mWebview;

1 : 加载本地的html
1.1 : 将一个本地的网址放到项目的资产目录下(url)

mWebview.loadUrl("file:///android_asset/url")//file:///android_asset格式固定写法

2 : 加载网络的html文件

mWebview.loadUrl("http://blog.csdn.net/qq_35651451/article/details/52423723");

3 : 双击放大缩小

WebSettings settings = mWebview.getSettings();
settings.setUseWideViewPort(true);

4.显示内建的放大缩小按钮

settings.setBuiltInZoomControls(true);

5.监听加载进度

mWebview.setWebChromeClient(new WebChromeClient() {
   @Override
   public void onProgressChanged(WebView view, int newProgress) {
     mProgressBar.setProgress(newProgress);
      super.onProgressChanged(view, newProgress);
    }
});

6.监听加载完成,开始

mWebview.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                mProgressBar.setVisibility(View.VISIBLE);
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                mProgressBar.setVisibility(View.GONE);
                //加载完成时动态的执行js脚本
                executeJs(view, jsScript);
                super.onPageFinished(view, url);
            }
        });

7.拿到webview正在请求的地址

String url = mWebview.getUrl();

8.webview的回退操作

public boolean onKeyDown(int keyCode, KeyEvent event) {
   if ((keyCode ==KeyEvent.KEYCODE_BACK)&&mWebview.canGoBack()) {
            mWebview.goBack(); //goBack()表示返回WebView的上一页面
            return true;
    }
        return false;
}

9.允许js

mWebview.getSettings().setJavaScriptEnabled(true);

10.动态在webview中执行js,意思就是在java中可以执行js里面的脚本

mWebview.loadUrl(让webview执行一段js脚本);

//jsScript  是js里面的一个脚本
String jsScript = "alert(\"这个是在java代码里面的一个js脚本\")";
mWebview.loadUrl("javascript:" + jsScript);

11 : 在js中调用java本地代码==>js–>java(在js里面可以调用java本地代码)

11.1 首先定义一个普通的类,在里面定义一些方法 不过方法里面只能传String类型

/**
 * 类    名:  JsObject
 * 描    述: 1.这个类就是一个普通的类
 * 描    述: 2.这个类定义的方法是供给js调用
 * 描    述: 3.方法传递的参数只能是string,但是其实只要可以传递string,其实什么东西都可以传
 */
public class JsObject {

    private String  mCurImgUrl;
    private String  mAllImgUrl;
    private Context mContext;

    public JsObject(Context context) {
        mContext = context;
    }

    /**
     * @param message
     * @des js传递相关的数据给java本地代码
     * @called 在js里面的相应的方法里面触发调用
     */
    @JavascriptInterface//17以上要加这个
    public void passMessageToJava(String message) {
        System.out.println("message:" + message);
    }
}

11.2 :

//参数1:桥梁类(自己的说法)-->1.普通类 2.定义的方法是给js调用 3.方法参数只能是string
//参数2:别名(自己的说法)--->在js里面调用本地方法的时候用到
mWebview.addJavascriptInterface(new JsObject(), "ancely");

11.3 :
写一个本地的html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script language="JavaScript">
            var aa = function(){
                //在这里调用Java本地代码
                window.ancely.passMessageToJava("来自星星的你")
            }

        </script>
    </head>
    <body>
    </body>
</html>

11.4
这时候加载本地的html文件

mWebview.loadUrl("file:///android_asset/url")//file:

完了之后,这个方法passMessageToJava()里面的输出语句就会执行,并把js肢本里面的数据带过来

public void passMessageToJava(String message) {
        System.out.println("message:" + message);
    }

猜你喜欢

转载自blog.csdn.net/qq_35651451/article/details/52462064