webview总结

webview总结:
首先要在manifest.main文件中创建一个webview,然后再activity中定义这个webview然后进行一下相关操作。
1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this);
3、设置WebView基本信息:
          如果访问的页面中有Javascript,则webview必须设置支持Javascript。
          webview.getSettings().setJavaScriptEnabled(true); 
          触摸焦点起作用
          requestFocus();
          取消滚动条
          this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url
                onLoadResource  
                onPageStart 
                onPageFinish 
                onReceiveError
                onReceivedHttpAuthRequest
5、如果访问的页面中有Javascript,则webview必须设置支持Javascript ,否则显示空白页面。
Java代码
       webview.getSettings().setJavaScriptEnabled(true); 
6、如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象:
Java代码
1. mWebView.setWebViewClient(new WebViewClient(){   
2.     public boolean shouldOverrideUrlLoading(WebView view, String url) {   
3.         view.loadUrl(url);   
4.         return true;   
5.     }   
6. }); 
上述方法告诉系统由我这个WebViewClient处理这个Intent,我来加载URL。点击一个链接的Intent是向上冒泡的,shouldOverrideUrlLoading方法return true表示我加载后这个Intent就消费了,不再向上冒泡了。

7、如果不做任何处理,在显示你的Brower UI时,点击系统“Back”键,整个Browser会作为一个整体“Back"到其他Activity中,而不是希望的在Browser的历史页面中 Back。如果希望实现在历史页面中Back,需要在当前Activity中处理并消费掉该Back事件:
Java代码
1. public boolean onKeyDown(int keyCode, KeyEvent event) {   
2.     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {   
3.         mWebView.goBack();   
4.         return true;   
5.     }   
6.     return super.onKeyDown(keyCode, event);   
7. } 
对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写                   onBackPressed 方法即可,代码如下
Java代码
@Override
1、public void onBackPressed() {
2、     // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk
3、    return ;
4、}

这里还有几个知识点:

1)为了让WebView从apk文件中加载 assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要绑定的 Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。

Webview的两种显示网页的方法:
(1):webview.loadUrl(“www.baidu.com”);
public class WebviewTest extends Activity {
    /** Called when the activity is first created. */
  
  private WebView mWebView;
     private Button bt1;
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         mWebView = (WebView)findViewById(R.id.webview);
         WebSettings webSettings = mWebView.getSettings();
         webSettings.setJavaScriptEnabled(true);
       
         bt1 = (Button)findViewById(R.id.Button01);
        
         bt1.setOnClickListener(new View.OnClickListener() {
    
    
    public void onClick(View arg0) {
     // TODO Auto-generated method stub
     webview.loadUrl(“www.baidu.com”);
    }
   });
     }
 }

(2):自定义网页:Webview.data();

public class WebviewTest extends Activity {
    /** Called when the activity is first created. */
  
  private WebView mWebView;
     private Button bt1;
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         mWebView = (WebView)findViewById(R.id.webview);
         WebSettings webSettings = mWebView.getSettings();
         webSettings.setJavaScriptEnabled(true);
       
         bt1 = (Button)findViewById(R.id.Button01);
        
         bt1.setOnClickListener(new View.OnClickListener() {
    
    
    public void onClick(View arg0) {
     // TODO Auto-generated method stub
     String str = "asdas";
       mWebView.loadData(
              "<html><body>"+str+"</body></html>",
              "text/html", "utf-8");
    }
   });
     }
 }

Webview的常用方法实例:

Manifest.xml中的代码:
加入权限:
<uses-permission android:name="android.permission.INTERNET" />  
布局文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <WebView android:id="@+id/WebView01" android:layout_width="fill_parent"
  android:layout_height="fill_parent"></WebView>
</LinearLayout>

TestWebviewDemo中的代码:
public class TestWebviewDemo extends Activity {
 /** Called when the activity is first created. */
 private static final String TAG = "TestWebviewDemo";
 private WebView mWebView;
 private Handler mHandler = new Handler();
 private int mDensity;
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mWebView = (WebView) findViewById(R.id.WebView01);
  mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
  mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放
  mWebView.getSettings().setSavePassword(false); // 设置是否保存密码
  // 设置支持JavaScript脚本
mWebView.getSettings().setJavaScriptEnabled(true);
// 设置支持各种不同的设备
  mWebView
    .getSettings()
    .setUserAgentString(
      "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");
        // 通过这个设置来执行加载webview网页时所要执行的一些方法
  mWebView.setWebViewClient(new WebViewClient() {
        // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
                // 当有新连接时使用当前的webview进行显示
    view.loadUrl(url);
    return super.shouldOverrideUrlLoading(view, url);
   }
            // 开始加载网页时要做的工作
   public void onPageStarted(WebView view, String url, Bitmap favicon) {

    super.onPageStarted(view, url, favicon);
   }
//加载完成时要做的工作
   public void onPageFinished(WebView view, String url) {

    super.onPageFinished(view, url);
   }
            // 加载错误时要做的工作
   public void onReceivedError(WebView view, int errorCode,
     String description, String failingUrl) {
    Log.d(TAG, "error=" + description);
    Toast.makeText(TestWebviewDemo.this,
      errorCode + "/" + description, Toast.LENGTH_LONG)
      .show();
   }
  });
  // 处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)
  mWebView.setWebChromeClient(new WebChromeClient() {
            // 对话框
   public boolean onJsAlert(WebView view, String url, String message,
     final JsResult result) {
    // 构建一个Builder来显示网页中的alert对话框
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("提示对话框");
    builder.setMessage(message);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {
       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.confirm();
       }
      });
    builder.setCancelable(false);
    builder.create();
    builder.show();
    return true;
   }
            // 带按钮的对话框
   public boolean onJsConfirm(WebView view, String url,
     String message, final JsResult result) {
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("带选择的对话框");
    builder.setMessage(message);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.confirm();
       }

      });
    builder.setNeutralButton(android.R.string.cancel,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.cancel();
       }

      });
    builder.setCancelable(false);
    builder.create();
    builder.show();
    return true;
   }
            // 带输入框的对话框
   public boolean onJsPrompt(WebView view, String url, String message,
     String defaultValue, final JsPromptResult result) {
    LayoutInflater inflater = LayoutInflater
      .from(TestWebviewDemo.this);
    final View v = inflater.inflate(R.layout.prom_dialog, null);
    // 设置 TextView对应网页中的提示信息
    ((TextView) v.findViewById(R.id.TextView_PROM))
      .setText(message);
    // 设置EditText对应网页中的输入框
    ((EditText) v.findViewById(R.id.EditText_PROM))
      .setText(defaultValue);
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("带输入的对话框");
    builder.setView(v);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        String value = ((EditText) v
          .findViewById(R.id.EditText_PROM))
          .getText().toString();
        result.confirm(value);
       }
      });
    builder.setNegativeButton(android.R.string.cancel,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.cancel();
       }
      });
    builder
      .setOnCancelListener(new DialogInterface.OnCancelListener() {

       @Override
       public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        result.cancel();
       }

      });
    builder.create();
    builder.show();
    return true;

   }

   // 设置网页加载的进度条
   public void onProgressChanged(WebView view, int newProgress) {
    TestWebviewDemo.this.getWindow().setFeatureInt(
      Window.FEATURE_PROGRESS, newProgress * 100);
    super.onProgressChanged(view, newProgress);
   }

   // 设置应用程序的标题
   public void onReceivedTitle(WebView view, String title) {
    TestWebviewDemo.this.setTitle(title);
    super.onReceivedTitle(view, title);
   }

  });
       // 与网页进行交互的addJavascriptInterface()的方法
  mWebView.addJavascriptInterface(new Object() {
   public void clickOnAndroid(final String str) {
    mHandler.post(new Runnable() {
     @Override
     public void run() {
     // 逻辑代码
               });
   }
  }, "demo");

  if (mDensity == 240) { // 可以让不同的density的情况下,可以让页面进行适配
   mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
  } else if (mDensity == 160) {
   mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);
  } else {
   mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);
  }
  String strUrl = "http://10.0.2.2:8080/WebTest3";
  mWebView.loadUrl(strUrl);
 }
    //处理返回的事件,(后退进入前一个界面而不是全部退出)
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
   mWebView.goBack();// 返回前一个页面
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

 


Webview中java与网页进行数据交互:
先看我们的html文档:
<html> 
    <script language="javascript"> 
        /* This function is invoked by the activity */  
        function wave() {  
            alert("1");  
            document.getElementById("droid").src="android_waving.png";  
            alert("2");  
        }  
    </script> 
    <body> 
        <!-- Calls into the javascript interface for the activity --> 
       //js调用Java方法
        <a onClick="window.demo.clickOnAndroid()"><div style="width:80px;  
            margin:0px auto;  
            padding:10px;  
            text-align:center;  
            border:2px solid #202020;" > 
                <img id="droid" src="android_normal.png"/><br> 
                Click me!  
        </div></a> 
    </body> 
</html> 

Manifest.Xml中:
加入权限:
<uses-permission android:name="android.permission.INTERNET" />  

再看我们的java 代码。
Java代码
public class WebViewDemo extends Activity {  
 
    private static final String LOG_TAG = "WebViewDemo";  
 
    private WebView mWebView;  
 
    private Handler mHandler = new Handler();  
 
    @Override 
    public void onCreate(Bundle icicle) {  
        super.onCreate(icicle);  
        setContentView(R.layout.main);  
        mWebView = (WebView) findViewById(R.id.webview);  
 
        WebSettings webSettings = mWebView.getSettings();  
        webSettings.setSavePassword(false);  
        webSettings.setSaveFormData(false);  
        webSettings.setJavaScriptEnabled(true);  
        webSettings.setSupportZoom(false);  
 
        mWebView.setWebChromeClient(new MyWebChromeClient());  
        //自定义的Demo,供js网页调用
        mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");  
 
        mWebView.loadUrl("file:///android_asset/demo.html");  
  }
final class DemoJavaScriptInterface {  
 
        DemoJavaScriptInterface() {  
        }  
 
        /** 
         * This is not called on the UI thread. Post a runnable to invoke 
         * loadUrl on the UI thread. 
         */ 
        public void clickOnAndroid() {  
           //用handler来更新UI
            mHandler.post(new Runnable() {  
                public void run() {  
                    //Java调用js方法
                    mWebView.loadUrl("javascript:wave()");  
                }  
            });  
        }  
    }  
    /** 
     * Provides a hook for calling "alert" from javascript. Useful for 
     * debugging your javascript. 
     */ 
    final class MyWebChromeClient extends WebChromeClient {  
        @Override 
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {  
            Log.d(LOG_TAG, message);  
            result.confirm();  
            return true;  
        }  
          
    }  


再看个例子:
Html中的代码:
<script type="text/JavaScript">     
function s(){  
alert("Good Morning!");      
}  
function d(){  
confirm("Are you ok?")  
}  
function f(){  
prompt("What’s your name?")  
}  
</script> 
  </head>
 
  <body>
   <body>  
  下面我们演示三种对话框  
  <br/><br/>  
  <input type="button" value="警告,提醒对话框" οnclick="s()">  
  <br/><br/>  
  <input type="button" value="带选择的对话框" οnclick="d()">  
  <br/><br/>  
  <input type="button" value="要求用户输入的对话框" οnclick="f()">  
  </body>  

Manifest.Xml中:
加入权限:
<uses-permission android:name="android.permission.INTERNET" />  

Java中的代码:
public class Test extends Activity {  
    /** Called when the activity is first created. */ 
    private EditText et = null;  
    private Button btn = null;  
    private WebView wv = null;  
    private WebSettings ws = null;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        et = (EditText) this.findViewById(R.id.EditText01);  
        btn = (Button) this.findViewById(R.id.Button01);  
        wv = (WebView) this.findViewById(R.id.WebView);  
        ws = wv.getSettings();  
        ws.setAllowFileAccess(true);//设置允许访问文件数据
        ws.setJavaScriptEnabled(true);//设置支持javascript脚本  
        ws.setBuiltInZoomControls(true);//设置支持缩放  
        wv.requestFocus();  
        wv.setWebViewClient(new WebViewClient(){  
            public boolean shouldOverrideUrlLoading(WebView view,String url){  
                //当有新连接时,使用当前的 WebView  
                view.loadUrl(url);  
                return true;  
            }  
        });  
        wv.setWebChromeClient(new WebChromeClient(){  
            public boolean onJsAlert(WebView view,String url,String message,final JsResult result){  
                //构建一个Builder来显示网页中的alert对话框  
                Builder builder = new Builder(Test.this);  
                builder.setTitle("提示对话框");  
                builder.setMessage(message);  
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){  
 
          
                    @Override 
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
                        result.confirm();  
                    }  
                      
                });  
                builder.setCancelable(false);  
                builder.create();  
                builder.show();  
                return true;  
            }  
            public boolean onJsConfirm(WebView view,String url,String message,final JsResult result){  
                Builder builder = new Builder(Test.this);  
                builder.setTitle("带选择的对话框");  
                builder.setMessage(message);  
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){  
 
                    @Override 
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
                        result.confirm();  
                    }  
                      
                });  
                builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener(){  
 
                    @Override 
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
                        result.cancel();  
                    }  
                      
                });  
                builder.setCancelable(false);  
                builder.create();  
                builder.show();  
                return true;  
            }  
            public boolean onJsPrompt(WebView view,String url,String message,String defaultValue,final JsPromptResult result){  
                LayoutInflater inflater = LayoutInflater.from(Test.this);  
                final View v = inflater.inflate(R.layout.prom_dialog, null);  
                //设置 TextView对应网页中的提示信息  
                ((TextView)v.findViewById(R.id.TextView_PROM)).setText(message);  
                //设置EditText对应网页中的输入框  
                ((EditText)v.findViewById(R.id.EditText_PROM)).setText(defaultValue);  
                Builder builder = new Builder(Test.this);  
                builder.setTitle("带输入的对话框 ");  
                builder.setView(v);  
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener(){  
 
                    @Override 
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
                        String value = ((EditText)v.findViewById(R.id.EditText_PROM)).getText().toString();  
                        result.confirm(value);  
                    }  
                      
                });  
                builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener(){  
 
                    @Override 
                    public void onClick(DialogInterface dialog, int which) {  
                        // TODO Auto-generated method stub  
                        result.cancel();  
                    }  
                      
                });  
                builder.setOnCancelListener(new DialogInterface.OnCancelListener(){  
 
                    @Override 
                    public void onCancel(DialogInterface dialog) {  
                        // TODO Auto-generated method stub  
                        result.cancel();  
                    }  
                      
                });  
                builder.create();  
                builder.show();  
                return true;  
            }  
            //设置网页加载的进度条  
            public void onProgressChanged(WebView view,int newProgress){  
                Test.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);  
                super.onProgressChanged(view, newProgress);  
            }  
            //设置应用程序的标题  
            public void onReceivedTitle(WebView view,String title){  
                Test.this.setTitle(title);  
                super.onReceivedTitle(view, title);  
            }  
        });  
        btn.setOnClickListener(new Button.OnClickListener(){  
 
            @Override 
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                String url =et.getText().toString();  
//             String url = "http://10.0.2.2:8080/WebTest3";
                //判断输入的内容是不是网址  
                if(URLUtil.isNetworkUrl(url)){ 
                 Log.d("++++++++++++", "sadas");
                    wv.loadUrl(url); 
                    Toast.makeText(Test.this, url, Toast.LENGTH_SHORT).show();
                }else{  
                    et.setHint("输入的网址不合法,请重新输入");  
//                  et.setText("输入的网址不合法,请重新输入");  
                }  
            }  
              
        });  
    }  
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if(keyCode==KeyEvent.KEYCODE_BACK && wv.canGoBack()){  
            wv.goBack();//返回前一个页面  
            return true;  
        }  
        return super.onKeyDown(keyCode, event);  
    }  
      

 

需要注意的地方,很多数据类型js中不认识,最好是在android那边封装好,提供必要的方法接口。比如传到js中的list,在js中是没办法去得到里面的元素的。

Manifest.Xml中:
加入权限:
<uses-permission android:name="android.permission.INTERNET" />  

html的带码
 <script language="javascript">
           window.οnlοad= function(){
                        var i=window.javatojs.getSize();
                        for(var n=0;n<i;n++){
                var jsdata= window.javatojs.getObject(n);//拿到activity里面的属性javadata
            var datalistdiv = document.getElementById("datalist"); //得到页面的div
            pnode = document.createElement("p");//创建一个p标签,再建个textnode
            tnode = document.createTextNode(jsdata);
            pnode.appendChild(tnode);//p中加入数据
            datalistdiv.appendChild(pnode);//div中键入新的p
      }
}
</script>
<body>
<div id = "datalist">
       
this is a demo
</body>

Java的代码:
public class JavaToWebview extends Activity {
   
    private WebView web;
    public List list;
   @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initData();
        setContentView(R.layout.webview);
        web = (WebView)this.findViewById(R.id.webview);
        web.getSettings().setJavaScriptEnabled(true);//开启javascript设置
        web.addJavascriptInterface(this, "javatojs");//把RIAExample的一个实例添加到js的全局对象window中, //这样就可以使用window.javatojs来调用它的方法
        web.loadUrl("加载网页
    
    }
    void initData(){
               list=new ArrayList<String>();
          for(int i=0;i<5;i++){
               list.add("我是从数据库中读取的哈哈");
          }
    }
    /**
     * 该方法将在js脚本中,通过window.javatojs.....()进行调用
     * @return
     */
    public Object getObject(int index){
                   return list.get(index);
    }
    public int getSize(){
             return list.size();
    }
}

再看一个查地图的例子:
Manifest.Xml中:
加入权限:
<uses-permission android:name="android.permission.INTERNET" />  
布局文件中的代码:
<?xml version="1.0" encoding="utf-8"?>     
<LinearLayout xmlns:android="

http://schemas.android.com/apk/res/android"    
    android:orientation="vertical"    
    android:layout_width="fill_parent"    
    android:layout_height="fill_parent"    
    >     
    <TextView       
        android:layout_width="fill_parent"      
        android:layout_height="wrap_content"      
        android:text="Welcome to Mr Wei's Blog."    
        />     
    <WebView     
        android:id="@+id/webview"    
        android:layout_width="fill_parent"      
        android:layout_height="wrap_content"      
    />     
    <Button     
        android:id="@+id/button"    
        android:layout_width="fill_parent"    
        android:layout_height="wrap_content"    
        android:text="Change the webview content"    
    />     
</LinearLayout>   
在assets目录下新建一个demo.html文件,代码如下:
<html>     
    <script language="javascript"><!--     
      
        function fillContent(){     
            document.getElementById("content").innerHTML =      
                 "This Content is showed by Android invoke Javascript function.";     
        }     
         
// --></script>       
  <body>     
    <p><a onClick="window.demo.startMap()" href="">Start GoogleMap</a></p>     
    <p id="content"></p>     
    <p>A Demo ----Android and Javascript invoke each other.</p>     
    <p>Author:Frankiewei</p>     
  </body>     
</html>    

activity代码:
public class WebViewDemo extends Activity {     
    private WebView mWebView;     
    private Button mButton;     
    public void onCreate(Bundle savedInstanceState) {     
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.main);     
        setupViews();     
    }     
    //初始化     
    private void setupViews() {     
        mWebView = (WebView) findViewById(R.id.webview);     
        WebSettings mWebSettings = mWebView.getSettings();     
        //加上这句话才能使用javascript方法     
        mWebSettings.setJavaScriptEnabled(true);     
        //增加接口方法,让html页面调用     
        mWebView.addJavascriptInterface(new Object() {     
            //这里我定义了一个打开地图应用的方法     
            public void startMap() {     
                Intent mIntent = new Intent();     
                ComponentName component = new ComponentName(     
                        "com.google.android.apps.maps",     
                        "com.google.android.maps.MapsActivity");     
                mIntent.setComponent(component);     
                startActivity(mIntent);     
            }     
        }, "demo");     
        //加载页面     
        mWebView.loadUrl("file:///android_asset/demo.html");     
        mButton = (Button) findViewById(R.id.button);     
        //给button添加事件响应,执行JavaScript的fillContent()方法     
        mButton.setOnClickListener(new Button.OnClickListener() {     
            public void onClick(View v) {     
                mWebView.loadUrl("javascript:fillContent()");     
            }     
        });     
    }     
}   


其他例子如下:(activity中获取js界面输入框的值)
Jsp中的代码:
<body>
  <form action="" method="post">
  宝宝预产期:<br>
  <select id="shijian" name="date">
      <option value="2006">2006</option>
      <option value="2007">2007</option>
      <option value="2008">2008</option>
      <option value="2009">2009</option>
      <option value="2010">2010</option>
  </select><br>
   常用邮箱号:
   <input id="email" type="text" name="emailID" />
   <br>
   宝宝昵称:
   <input id="name" type="text" name="username" />
   <br>
   宝宝性别:<br>
   <input id="men" type="radio" name="sex" value="men"/>男
      <input id="women" type="radio" name="sex" value="women"/>女
      <br>
      <input type="submit" value="注册"
    οnclick="f()"/>
   <input type="button" value="取消" />
  </form>
 </body>
 <script type="text/JavaScript" language="javascript">
      function f(){
         var email = document.getElementById('email').value;
         var name = document.getElementById('name').value;
         var date = document.getElementById('shijian').value;
         if(document.getElementById('men').checked && !document.getElementById('women').checked){
         var sex = document.getElementById('men').value;
         }else if(!document.getElementById('men').checked && document.getElementById('women').checked){
         var sex = document.getElementById('women').value;
         }
         window.demo.clickOnAndroid(date+"|"+email+"|"+name+"|"+sex);       
         }    
  </script>
Manifest.xml中的代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.ruixin.login" android:versionCode="1" android:versionName="1.0">
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name=".TestWebviewDemo" android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
   <intent-filter>
    <data android:mimeType="vnd.android.cursor.dir/vnd.ruixin.login" />
   </intent-filter>
   <intent-filter>
    <data android:mimeType="vnd.android.cursor.item/vnd.ruixin.login" />
   </intent-filter>
   
  </activity>
  <provider android:name="MyProvider" android:authorities="com.ruixin.login" />
 </application>
 <uses-sdk android:minSdkVersion="8" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
</manifest>


布局文件中的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <WebView android:id="@+id/WebView01" android:layout_width="fill_parent"
  android:layout_height="fill_parent"></WebView>
</LinearLayout>

TestWebviewDemo中的代码:
public class TestWebviewDemo extends Activity {
 /** Called when the activity is first created. */
 private static final String TAG = "TestWebviewDemo";
 private WebView mWebView;
 private Handler mHandler = new Handler();
 private int mDensity;
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  mWebView = (WebView) findViewById(R.id.WebView01);
  mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
  mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放
  mWebView.getSettings().setSavePassword(false); // 设置是否保存密码
  // 设置支持JavaScript脚本
mWebView.getSettings().setJavaScriptEnabled(true);
// 设置支持各种不同的设备
  mWebView
    .getSettings()
    .setUserAgentString(
      "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");
        // 通过这个设置来执行加载webview网页时所要执行的一些方法
  mWebView.setWebViewClient(new WebViewClient() {
        // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
                // 当有新连接时使用当前的webview进行显示
    view.loadUrl(url);
    return super.shouldOverrideUrlLoading(view, url);
   }
            // 开始加载网页时要做的工作
   public void onPageStarted(WebView view, String url, Bitmap favicon) {

    super.onPageStarted(view, url, favicon);
   }
//加载完成时要做的工作
   public void onPageFinished(WebView view, String url) {

    super.onPageFinished(view, url);
   }
            // 加载错误时要做的工作
   public void onReceivedError(WebView view, int errorCode,
     String description, String failingUrl) {
    Log.d(TAG, "error=" + description);
    Toast.makeText(TestWebviewDemo.this,
      errorCode + "/" + description, Toast.LENGTH_LONG)
      .show();
   }
  });
  // 处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)
  mWebView.setWebChromeClient(new WebChromeClient() {
            // 对话框
   public boolean onJsAlert(WebView view, String url, String message,
     final JsResult result) {
    // 构建一个Builder来显示网页中的alert对话框
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("提示对话框");
    builder.setMessage(message);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.confirm();
       }
      });
    builder.setCancelable(false);
    builder.create();
    builder.show();
    return true;
   }
            // 带按钮的对话框
   public boolean onJsConfirm(WebView view, String url,
     String message, final JsResult result) {
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("带选择的对话框");
    builder.setMessage(message);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.confirm();
       }

      });
    builder.setNeutralButton(android.R.string.cancel,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.cancel();
       }

      });
    builder.setCancelable(false);
    builder.create();
    builder.show();
    return true;
   }
            // 带输入框的对话框
   public boolean onJsPrompt(WebView view, String url, String message,
     String defaultValue, final JsPromptResult result) {
    LayoutInflater inflater = LayoutInflater
      .from(TestWebviewDemo.this);
    final View v = inflater.inflate(R.layout.prom_dialog, null);
    // 设置 TextView对应网页中的提示信息
    ((TextView) v.findViewById(R.id.TextView_PROM))
      .setText(message);
    // 设置EditText对应网页中的输入框
    ((EditText) v.findViewById(R.id.EditText_PROM))
      .setText(defaultValue);
    Builder builder = new Builder(TestWebviewDemo.this);
    builder.setTitle("带输入的对话框");
    builder.setView(v);
    builder.setPositiveButton(android.R.string.ok,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        String value = ((EditText) v
          .findViewById(R.id.EditText_PROM))
          .getText().toString();
        result.confirm(value);
       }
      });
    builder.setNegativeButton(android.R.string.cancel,
      new AlertDialog.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog,
         int which) {
        // TODO Auto-generated method stub
        result.cancel();
       }
      });
    builder
      .setOnCancelListener(new DialogInterface.OnCancelListener() {

       @Override
       public void onCancel(DialogInterface dialog) {
        // TODO Auto-generated method stub
        result.cancel();
       }

      });
    builder.create();
    builder.show();
    return true;

   }

   // 设置网页加载的进度条
   public void onProgressChanged(WebView view, int newProgress) {
    TestWebviewDemo.this.getWindow().setFeatureInt(
      Window.FEATURE_PROGRESS, newProgress * 100);
    super.onProgressChanged(view, newProgress);
   }

   // 设置应用程序的标题
   public void onReceivedTitle(WebView view, String title) {
    TestWebviewDemo.this.setTitle(title);
    super.onReceivedTitle(view, title);
   }

  });
       // 与网页进行交互的addJavascriptInterface()的方法
  mWebView.addJavascriptInterface(new Object() {
   public void clickOnAndroid(final String str) {
    mHandler.post(new Runnable() {
     @Override
     public void run() {
     StringTokenizer stringTokenizer = new StringTokenizer(
        str, "|");
      date = stringTokenizer.nextToken();
      email = stringTokenizer.nextToken();
      username = stringTokenizer.nextToken();
      sex = stringTokenizer.nextToken();
                          //将数据出入数据库
dBlite1.add(email,username,date,sex);
// 用contentResolver访问存入到contentprovider中的数据
contentResolver = TestWebviewDemo.this
        .getContentResolver();
      Log.d("++++", RuiXin.CONTENT_URI.toString());

      Cursor cursor = contentResolver.query(
        RuiXin.CONTENT_URI, new String[] {
          RuiXin.EMAIL, RuiXin.USERNAME,
          RuiXin.DATE,RuiXin.SEX }, null, null, null);
      Log.d("@@@----", cursor.toString());
      // startManagingCursor(cursor);
      while (cursor.moveToNext()) {
       Toast.makeText(
         TestWebviewDemo.this,
         cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))
           + " "
           + cursor.getString(cursor
             .getColumnIndex(RuiXin.USERNAME))
           + " "
           + cursor.getString(cursor
             .getColumnIndex(RuiXin.DATE))
              + " "
              + cursor.getString(cursor
                .getColumnIndex(RuiXin.SEX)),
         Toast.LENGTH_SHORT).show();
      }
      startManagingCursor(cursor);   //关闭游标
     }
               });
   }
  }, "demo");

  if (mDensity == 240) { // 可以让不同的density的情况下,可以让页面进行适配
   mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
  } else if (mDensity == 160) {
   mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);
  } else {
   mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);
  }
  String strUrl = "http://10.0.2.2:8080/WebTest3";
  mWebView.loadUrl(strUrl);
 }
    //处理返回的事件,(后退进入前一个界面而不是全部退出)
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
   mWebView.goBack();// 返回前一个页面
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值