安卓嵌套本地html交互

1.布局layout

布局中拖一个WebView控件

<WebView
	android:id="@+id/wv_webview"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:layout_editor_absoluteX="0dp"
	tools:layout_editor_absoluteY="0dp" />

2.创建html网页

新建assets文件夹,与res同目录,新建about.html

<html>
<head>
    <meta charset="utf-8" />
    <title>关于</title>
</head>
<body>
    <h1>关于我们</h1>
    <h3 id="info"></h3>
    <button onclick="web2Android()">我找定制开发</button>
</body>
<script>
    /**
     * 安卓调用web方法
     */
    function android2Web(str){
        document.getElementById("info").innerHTML = str;
    }

    /**
     * web调用安卓方法
     */
    function web2Android() {
        webobj.web2Android('我找定制开发');
    }
</script>
</html>

3.写Activity方法实现交互

@SuppressLint({"JavascriptInterface", "SetJavaScriptEnabled"})
private void initViews() {
    webView = findViewById(R.id.wv_webview);
    //设置支持js
    webView.getSettings().setJavaScriptEnabled(true);
    webView.requestFocus();
    webView.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
    //设置背景色
    webView.setBackgroundColor(Color.parseColor("#FFFFFFFF"));
    //设置本地网页/线上网页
    webView.loadUrl("file:///android_asset/about.html");

    webView.addJavascriptInterface(new JsInterface(),"webobj");

    //设置web客户端,用于监听客户端事件
    webView.setWebViewClient(new WebViewClient() {
        //点击链接后不跳转其他浏览器
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            // 如果不需要其他对点击链接事件的处理返回true,否则返回false
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            //TODO:打开时显示加载框
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            android2Web();
            //TODO:加载完成关闭加载框
        }
    });
}

/**
 * js接口,用于提供web页面调用方法
 */
private class JsInterface {
    @JavascriptInterface
    public void web2Android(String intent) {
        Log.i("JsInterface", intent);
        Toast.makeText(MainActivity.this, "没问题,私聊我", Toast.LENGTH_LONG).show();
    }
}

/**
 * 模拟安卓调用web页面方法
 */
private void android2Web() {
    webView.post(() -> webView.loadUrl(
            "javascript:android2Web('济南研发工作室,承接Java web、安卓、混开App、小程序开发,物联网开发、技术问题解决')"));
}
上一篇:实验一


下一篇:使用WebView控件来实现百度页面的加载