WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,还可以与JS交互
1 package com.wuxianedu.webviewa; 2 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.view.View; 6 import android.webkit.JavascriptInterface; 7 import android.webkit.WebSettings; 8 import android.webkit.WebView; 9 import android.widget.Toast; 10 11 public class MainActivity extends AppCompatActivity implements View.OnClickListener { 12 13 private WebView webView; 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 WebView webView = new WebView(this); 20 webView = (WebView) findViewById(R.id.wv_view); 21 Initialize(); 22 //findViewById(R.id.but_id).setOnClickListener(this); 23 //载入网址 24 webView.loadUrl("http://www.xiaodao.la/"); 25 26 } 27 28 private void Initialize() { 29 /** 30 * 30-31行代码 31 * 使webview支持JavaScript脚本 32 */ 33 WebSettings webSettings = webView.getSettings(); 34 webSettings.setJavaScriptEnabled(true); 35 //此处大致意思就是,第一个参数是一个对象,第二个参数是对象的名字,在JS里面如果要调用此对象,就要用到这个名字, 36 // webView.addJavascriptInterface(new ReferenceClass(),"jsListener"); 37 } 38 39 @Override 40 public void onClick(View v) { 41 42 } 43 44 //内部类 45 class ReferenceClass{ 46 //在Android4.2之后,需要添加这个注解 47 @JavascriptInterface 48 //新建一个方法,方法名就是JS中调用的方法名 49 public void fun1FromAndroid(String message){ 50 Toast.makeText(MainActivity.this, "fun1FromAndroid:"+message, Toast.LENGTH_SHORT).show(); 51 } 52 //zeg 53 @JavascriptInterface 54 //新建一个方法,方法名就是JS中调用的方法名 55 public void fun2FromAndroid(String message){ 56 Toast.makeText(MainActivity.this, "fun1FromAndroid:"+message, Toast.LENGTH_SHORT).show(); 57 } 58 } 59 }
布局文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="vertical" 7 tools:context="com.wuxianedu.webviewa.MainActivity"> 8 9 <Button android:id="@+id/but_id" 10 android:layout_width="match_parent" android:text="点我调用JS方法" 11 android:layout_height="wrap_content" /> 12 <WebView android:id="@+id/wv_view" 13 android:layout_width="match_parent" 14 android:layout_height="match_parent"/> 15 16 </LinearLayout>
html文件
1 <html> 2 3 <head> 4 <meta charset="utf-8"> 5 </head> 6 7 <body> 8 <div id="helloweb"></div> 9 <br/> 10 <h1> 11 <a >js中调用本地方法(方法一)</a> 12 </h1> 13 <br/> 14 <a id="aid">js中调用本地方法(方法一.1)</a> 15 <script> 16 function funFromjs(){ 17 document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js"; 18 } 19 20 //JavaScript代码与java代码进行通信 -- start 21 //getElementsByTagName('a'):获取标签为a数组 22 var aTag = document.getElementsByTagName('a')[0]; 23 aTag.addEventListener('click', function(){ 24 //调用android本地方法 25 jsListener.fun1FromAndroid("调用android本地方法fun1FromAndroid(String name)!!"); 26 return true; 27 }, false); 28 29 //getElementById('aid'):获取id为aid的元素 30 var aTag = document.getElementById("aid") 31 aTag.addEventListener('click', function(){ 32 //调用android本地方法 33 jsListener.fun1FromAndroid("本地方法fun1FromAndroid(String name)"); 34 return true; 35 }, false); 36 37 //JavaScript代码与java代码进行通信 -- end 38 </script> 39 40 <br/><br/> 41 <a onclick="javascript:jsListener.fun2FromAndroid('您好,android')">js中调用本地方法(方法二)</a> 42 </body> 43 </html>