package net.bwie.webview.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import net.bwie.webview.R; import net.bwie.webview.web.JavaScriptCallback; public class MainActivity extends AppCompatActivity implements View.OnClickListener { protected Button mLoadHtmlCodeBtn; protected Button mLoadHtmlUrlBtn; protected Button mLoadHtmlFileBtn; protected Button mShowHtmlAlertBtn; protected WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); initView(); } @Override public void onClick(View view) { if (view.getId() == R.id.load_html_code_btn) { loadHtmlCode(); } else if (view.getId() == R.id.load_html_url_btn) { loadHtmlUrl(); } else if (view.getId() == R.id.load_html_file_btn) { loadHtmlFile(); } else if (view.getId() == R.id.show_html_alert_btn) { showHtmlAlert(); } } // 加载html代码 private void loadHtmlCode() { String htmlCode = "<h1><b><i>我是江西吴彦祖</i></b></h1>"; // 加载html代码 mWebView.loadDataWithBaseURL(null, htmlCode, "text/html", "UTF-8", null); } // 加载url地址 private void loadHtmlUrl() { String url = "https://www.baidu.com/"; // 将当前应用设置为网页客户端,网页将在当前应用中打开 mWebView.setWebViewClient(new WebViewClient()); // 加载url地址 mWebView.loadUrl(url); } // 加载assets文件夹中的html文件 private void loadHtmlFile() { String fileUri = "file://" + "/android_asset/" + "index.html"; // WebView设置Chrome的内核,用于处理逻辑操作 mWebView.setWebChromeClient(new WebChromeClient()); // 设置WebView可以和JavaScript交互,通过WebView的设置启用JavaScript WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true); // 给WebView添加交互用的接口 mWebView.addJavascriptInterface(new JavaScriptCallback(this), "callback"); // 加载html文件 mWebView.loadUrl(fileUri); } // 点击Android按钮弹出网页对话框 private void showHtmlAlert() { String content = "点击Android按钮,展示html对话框"; StringBuilder stringBuilder = new StringBuilder("javascript:"); stringBuilder.append("showAlert(") .append("'" + content + "'") .append(")"); // Android调用html mWebView.loadUrl(stringBuilder.toString()); } private void initView() { mLoadHtmlCodeBtn = (Button) findViewById(R.id.load_html_code_btn); mLoadHtmlCodeBtn.setOnClickListener(MainActivity.this); mLoadHtmlUrlBtn = (Button) findViewById(R.id.load_html_url_btn); mLoadHtmlUrlBtn.setOnClickListener(MainActivity.this); mLoadHtmlFileBtn = (Button) findViewById(R.id.load_html_file_btn); mLoadHtmlFileBtn.setOnClickListener(MainActivity.this); mWebView = (WebView) findViewById(R.id.web_view); mShowHtmlAlertBtn = (Button) findViewById(R.id.show_html_alert_btn); mShowHtmlAlertBtn.setOnClickListener(MainActivity.this); } // 重写系统返回键,判断WebView是否到达首页 @Override public void onBackPressed() { // 判断WebView是否可返回上一页 if (mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } } }
还有一个交互类和html
package net.bwie.webview.web; import android.content.Context; import android.webkit.JavascriptInterface; import android.widget.Toast; // html调用Android的接口回调 // 注意:类型是class而不是interface public class JavaScriptCallback { private Context mContext; public JavaScriptCallback(Context context) { mContext = context; } // 展示Android的吐司 @JavascriptInterface public void showToast(String content) { Toast.makeText(mContext, content, Toast.LENGTH_SHORT).show(); } }
以及参考的网页
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>我的网页</title> </head> <body> <p>我是html页面</p> <button οnclick="showAndroidToast()">点击网页按钮展示Android吐丝儿</button> </body> <script> // 在JavaScript中声明一个展示Android吐司的函数 function showAndroidToast() { var content = "点击网页按钮展示了Android吐司"; // 在Android的WebView中添加与JS交互的接口时,并设定了该接口名 // 使用接口调用Android的方法即可 callback.showToast(content); } // 弹出对话框 function showAlert(content) { alert(content); } </script> </html>