webview总结

工作中用到了webview 下面把webview相关的知识进行一下总结

首先要在manifest.main文件中创建一个webview,然后再activity中定义这个webview然后进行一下相关操作。

1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web pagenot available错误。

2、在要Activity中生成一个WebView组件:WebView webView = newWebView(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中响应该链接,必须覆盖webviewWebViewClient对象:

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 extendsActivity {

    /** Called whenthe 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 voidonClick(View arg0) {

                                               // TODO Auto-generated method stub

                                               webview.loadUrl(“www.baidu.com”);

                                     }

                            });

            }

         }

 

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

 

public class WebviewTest extendsActivity {

    /** Called whenthe 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 voidonClick(View arg0) {

                                               // TODO Auto-generated method stub

                                               Stringstr = "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 {

         /** Calledwhen the activity is first created. */

         privatestatic finalString TAG = "TestWebviewDemo";

         privateWebView mWebView;

         privateHandler mHandler = new Handler();

         privateint mDensity;

         publicvoid onCreate(BundlesavedInstanceState) {

                   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/7B334bSafari/531.21.10");

        //通过这个设置来执行加载webview网页时所要执行的一些方法

                   mWebView.setWebViewClient(new WebViewClient() {

        // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示

                            public booleanshouldOverrideUrlLoading(WebView view, String url) {

                                     // TODO Auto-generated method stub

                // 当有新连接时使用当前的webview进行显示

                                     view.loadUrl(url);

                                     return super.shouldOverrideUrlLoading(view,url);

                            }

            // 开始加载网页时要做的工作

                            public voidonPageStarted(WebView view, String url, Bitmap favicon) {

 

                                     super.onPageStarted(view, url, favicon);

                            }

//加载完成时要做的工作

                            public voidonPageFinished(WebView view, String url) {

 

                                     super.onPageFinished(view, url);

                            }

            // 加载错误时要做的工作

                            public voidonReceivedError(WebView view, interrorCode,

                                               Stringdescription, String failingUrl) {

                                     Log.d(TAG, "error="+ description);

                                     Toast.makeText(TestWebviewDemo.this,

                                                        errorCode+ "/" + description, Toast.LENGTH_LONG)

                                                        .show();

                            }

                   });

                   //处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

                   mWebView.setWebChromeClient(new WebChromeClient() {

            // 对话框

                            public booleanonJsAlert(WebView view, String url, String message,

                                               final JsResult result) {

                                     // 构建一个Builder来显示网页中的alert对话框

                                     Builderbuilder = newBuilder(TestWebviewDemo.this);

                                     builder.setTitle("提示对话框");

                                     builder.setMessage(message);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.confirm();

                                                                 }

                                                        });

                                     builder.setCancelable(false);

                                     builder.create();

                                     builder.show();

                                     return true;

                            }

            // 带按钮的对话框

                            public booleanonJsConfirm(WebView view, String url,

                                               Stringmessage, final JsResult result) {

                                     Builderbuilder = newBuilder(TestWebviewDemo.this);

                                     builder.setTitle("带选择的对话框");

                                     builder.setMessage(message);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.confirm();

                                                                 }

 

                                                        });

                                     builder.setNeutralButton(android.R.string.cancel,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

 

                                                        });

                                     builder.setCancelable(false);

                                     builder.create();

                                     builder.show();

                                     return true;

                            }

            // 带输入框的对话框

                            public booleanonJsPrompt(WebView view, String url, String message,

                                               StringdefaultValue, final JsPromptResultresult) {

                                     LayoutInflaterinflater = 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);

                                     Builderbuilder = new Builder(TestWebviewDemo.this);

                                     builder.setTitle("带输入的对话框");

                                     builder.setView(v);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           Stringvalue = ((EditText) v

                                                                                             .findViewById(R.id.EditText_PROM))

                                                                                             .getText().toString();

                                                                           result.confirm(value);

                                                                 }

                                                        });

                                     builder.setNegativeButton(android.R.string.cancel,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

                                                        });

                                     builder

                                                        .setOnCancelListener(new DialogInterface.OnCancelListener() {

 

                                                                 @Override

                                                                 public voidonCancel(DialogInterface dialog) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

 

                                                        });

                                     builder.create();

                                     builder.show();

                                      return true;

 

                            }

 

                            // 设置网页加载的进度条

                            public voidonProgressChanged(WebView view, intnewProgress) {

                                     TestWebviewDemo.this.getWindow().setFeatureInt(

                                                        Window.FEATURE_PROGRESS, newProgress * 100);

                                     super.onProgressChanged(view, newProgress);

                            }

 

                            // 设置应用程序的标题

                            public voidonReceivedTitle(WebView view, String title) {

                                     TestWebviewDemo.this.setTitle(title);

                                     super.onReceivedTitle(view, title);

                            }

 

                   });

       // 与网页进行交互的addJavascriptInterface()的方法

                   mWebView.addJavascriptInterface(new Object() {

                            public voidclickOnAndroid(final String str){

                                     mHandler.post(newRunnable() {

                                               @Override

                                               public voidrun() {

                                               // 逻辑代码

               });

                            }

                   }, "demo");

 

                   if(mDensity == 240) { //可以让不同的density的情况下,可以让页面进行适配

                            mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);

                   } elseif (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

         publicboolean onKeyDown(int keyCode, KeyEvent event) {

                   if(keyCode == KeyEvent.KEYCODE_BACK&& mWebView.canGoBack()) {

                            mWebView.goBack();// 返回前一个页面

                            return true;

                   }

                   returnsuper.onKeyDown(keyCode, event);

         }

 

 

 

 

Webviewjava与网页进行数据交互:

先看我们的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()"><divstyle="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. Usefulfor 

    * 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">     

functions(){  

alert("Good Morning!");      

}  

functiond(){  

confirm("Are you ok?")  

}  

functionf(){  

prompt("What’s yourname?")  

}  

</script> 

  </head>

 

  <body>

   <body>  

  下面我们演示三种对话框  

  <br/><br/>  

  <inputtype="button" value="警告,提醒对话框" onclick="s()">  

  <br/><br/>  

  <inputtype="button" value="带选择的对话框" onclick="d()">  

  <br/><br/>  

  <inputtype="button" value="要求用户输入的对话框" onclick="f()">  

  </body>  

 

Manifest.Xml中:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />  

 

Java中的代码:

public class Test extendsActivity {  

    /** Called whenthe activity is first created. */ 

    privateEditText et = null;  

    privateButton btn = null;  

    privateWebView wv = null;  

    privateWebSettings ws = null;  

    @Override 

    publicvoid onCreate(BundlesavedInstanceState) {  

        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(){  

            publicbooleanshouldOverrideUrlLoading(WebView view,String url){  

                //当有新连接时,使用当前的 WebView  

                view.loadUrl(url);  

                returntrue;  

            }  

        });  

        wv.setWebChromeClient(new WebChromeClient(){  

            publicboolean onJsAlert(WebView view,Stringurl,String message,final JsResultresult){  

                //构建一个Builder来显示网页中的alert对话框   

                Builder builder = new Builder(Test.this);  

                builder.setTitle("提示对话框");  

               builder.setMessage(message);  

               builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){  

 

          

                    @Override 

                    publicvoid onClick(DialogInterface dialog, int which) {  

                        // TODO Auto-generated method stub  

                        result.confirm();  

                    }  

                      

                });  

                builder.setCancelable(false);  

                builder.create();  

                builder.show();  

                returntrue;  

            }  

           public boolean onJsConfirm(WebView view,Stringurl,String message,final JsResultresult){  

                Builder builder = new Builder(Test.this);  

                builder.setTitle("带选择的对话框");  

               builder.setMessage(message);  

               builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){  

 

                    @Override 

                    publicvoid onClick(DialogInterface dialog, int which) {  

                        // TODO Auto-generated method stub  

                        result.confirm();  

                    }  

                      

                });  

               builder.setNeutralButton(android.R.string.cancel,newAlertDialog.OnClickListener(){  

 

                    @Override 

                    publicvoid onClick(DialogInterface dialog, int which) {  

                        // TODO Auto-generated method stub  

                        result.cancel();  

                    }  

                      

                });  

                builder.setCancelable(false);  

                builder.create();  

                builder.show();  

                returntrue;  

            }  

            publicboolean onJsPrompt(WebViewview,String url,String message,String defaultValue,finalJsPromptResult result){  

                LayoutInflater inflater =LayoutInflater.from(Test.this);  

                finalView 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 

                    publicvoid 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, newAlertDialog.OnClickListener(){  

 

                    @Override 

                    publicvoid onClick(DialogInterface dialog, int which) {  

                        // TODO Auto-generated method stub   

                        result.cancel();  

                    }  

                      

                });  

                builder.setOnCancelListener(new DialogInterface.OnCancelListener(){  

 

                    @Override 

                    publicvoid onCancel(DialogInterface dialog){  

                        // TODO Auto-generated method stub  

                        result.cancel();  

                    }  

                      

                });  

                builder.create();  

                builder.show();  

                returntrue;  

            }  

            //设置网页加载的进度条  

            publicvoid onProgressChanged(WebView view,int newProgress){  

                Test.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);  

                super.onProgressChanged(view,newProgress);  

            }  

            //设置应用程序的标题  

            publicvoid onReceivedTitle(WebViewview,String title){  

                Test.this.setTitle(title);  

                super.onReceivedTitle(view,title);  

            }  

        });  

        btn.setOnClickListener(new Button.OnClickListener(){  

 

            @Override 

            publicvoid onClick(View v) {  

                // TODOAuto-generated method stub  

                String url =et.getText().toString();  

//                  Stringurl = "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 

    publicboolean onKeyDown(int keyCode, KeyEvent event) {  

        if(keyCode==KeyEvent.KEYCODE_BACK && wv.canGoBack()){  

            wv.goBack();//返回前一个页面  

            returntrue;  

        }  

        returnsuper.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(){

                        vari=window.javatojs.getSize();

                        for(varn=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("file:///android_asset/demo5.html");//加载网页

    

    }

   void initData(){

               list=newArrayList<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"?>     

<LinearLayoutxmlns: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>     

    <scriptlanguage="javascript"><!--     

      

       function fillContent(){     

           document.getElementById("content").innerHTML =      

                 "This Content is showedby 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 eachother.</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 = newIntent();     

                ComponentName component = newComponentName(     

                       "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">

                       <optionvalue="2006">2006</option>

                       <optionvalue="2007">2007</option>

                       <optionvalue="2008">2008</option>

                       <optionvalue="2009">2009</option>

                       <optionvalue="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"/>

                       <inputid="women" type="radio" name="sex" value="women"/>

                       <br>

                       <inputtype="submit" value="注册"

                                     onclick="f()"/>

                            <input type="button" value="取消" />

                   </form>

         </body>

         <script type="text/JavaScript"language="javascript">

             functionf(){

                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;

                }elseif(!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">

         <applicationandroid:icon="@drawable/icon" android:label="@string/app_name">

                   <activity android:name=".TestWebviewDemo" android:label="@string/app_name">

                            <intent-filter>

                                     <actionandroid:name="android.intent.action.MAIN" />

                                     <categoryandroid:name="android.intent.category.LAUNCHER"/>

                            </intent-filter>

                            <intent-filter>

                                     <dataandroid:mimeType="vnd.android.cursor.dir/vnd.ruixin.login"/>

                            </intent-filter>

                            <intent-filter>

                                     <dataandroid: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-permissionandroid:name="android.permission.INTERNET" />

         <uses-permissionandroid: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 {

         /** Calledwhen the activity is first created. */

         privatestatic finalString TAG = "TestWebviewDemo";

         privateWebView mWebView;

         privateHandler mHandler = new Handler();

         privateint mDensity;

         publicvoid onCreate(BundlesavedInstanceState) {

                   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/7B334bSafari/531.21.10");

        //通过这个设置来执行加载webview网页时所要执行的一些方法

                   mWebView.setWebViewClient(new WebViewClient() {

        // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示

                            public booleanshouldOverrideUrlLoading(WebView view, String url) {

                                     // TODO Auto-generated method stub

                // 当有新连接时使用当前的webview进行显示

                                     view.loadUrl(url);

                                     return super.shouldOverrideUrlLoading(view,url);

                            }

            // 开始加载网页时要做的工作

                            public voidonPageStarted(WebView view, String url, Bitmap favicon) {

 

                                     super.onPageStarted(view, url, favicon);

                            }

//加载完成时要做的工作

                            public voidonPageFinished(WebView view, String url) {

 

                                     super.onPageFinished(view, url);

                            }

            // 加载错误时要做的工作

                            public voidonReceivedError(WebView view, interrorCode,

                                               Stringdescription, String failingUrl) {

                                     Log.d(TAG, "error="+ description);

                                     Toast.makeText(TestWebviewDemo.this,

                                                        errorCode+ "/" + description, Toast.LENGTH_LONG)

                                                        .show();

                            }

                   });

                   //处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

                   mWebView.setWebChromeClient(new WebChromeClient() {

            // 对话框

                            public booleanonJsAlert(WebView view, String url, String message,

                                               final JsResult result) {

                                     // 构建一个Builder来显示网页中的alert对话框

                                     Builderbuilder = newBuilder(TestWebviewDemo.this);

                                     builder.setTitle("提示对话框");

                                     builder.setMessage(message);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.confirm();

                                                                 }

                                                        });

                                     builder.setCancelable(false);

                                     builder.create();

                                     builder.show();

                                     return true;

                            }

            // 带按钮的对话框

                            public booleanonJsConfirm(WebView view, String url,

                                               Stringmessage, final JsResult result) {

                                     Builderbuilder = newBuilder(TestWebviewDemo.this);

                                     builder.setTitle("带选择的对话框");

                                     builder.setMessage(message);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.confirm();

                                                                 }

 

                                                        });

                                     builder.setNeutralButton(android.R.string.cancel,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

 

                                                        });

                                     builder.setCancelable(false);

                                     builder.create();

                                     builder.show();

                                     return true;

                            }

            // 带输入框的对话框

                            public booleanonJsPrompt(WebView view, String url, String message,

                                               StringdefaultValue, final JsPromptResultresult) {

                                     LayoutInflaterinflater = 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);

                                     Builderbuilder = newBuilder(TestWebviewDemo.this);

                                     builder.setTitle("带输入的对话框");

                                     builder.setView(v);

                                     builder.setPositiveButton(android.R.string.ok,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           Stringvalue = ((EditText) v

                                                                                             .findViewById(R.id.EditText_PROM))

                                                                                             .getText().toString();

                                                                           result.confirm(value);

                                                                 }

                                                        });

                                     builder.setNegativeButton(android.R.string.cancel,

                                                        new AlertDialog.OnClickListener() {

 

                                                                 @Override

                                                                 public voidonClick(DialogInterface dialog,

                                                                                    int which) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

                                                        });

                                     builder

                                                        .setOnCancelListener(new DialogInterface.OnCancelListener() {

 

                                                                 @Override

                                                                 public voidonCancel(DialogInterface dialog) {

                                                                           // TODO Auto-generated method stub

                                                                           result.cancel();

                                                                 }

 

                                                        });

                                     builder.create();

                                     builder.show();

                                     return true;

 

                            }

 

                            // 设置网页加载的进度条

                            public voidonProgressChanged(WebView view, intnewProgress) {

                                     TestWebviewDemo.this.getWindow().setFeatureInt(

                                                        Window.FEATURE_PROGRESS, newProgress * 100);

                                     super.onProgressChanged(view, newProgress);

                            }

 

                            // 设置应用程序的标题

                            public voidonReceivedTitle(WebView view, String title) {

                                     TestWebviewDemo.this.setTitle(title);

                                     super.onReceivedTitle(view, title);

                            }

 

                   });

       // 与网页进行交互的addJavascriptInterface()的方法

                   mWebView.addJavascriptInterface(new Object() {

                            public voidclickOnAndroid(final String str){

                                     mHandler.post(newRunnable() {

                                               @Override

                                               public voidrun() {

                                               StringTokenizerstringTokenizer = newStringTokenizer(

                                                                           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());

 

                                                        Cursorcursor = contentResolver.query(

                                                                           RuiXin.CONTENT_URI, newString[] {

                                                                                             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);

                   } elseif (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

         publicboolean onKeyDown(int keyCode, KeyEvent event) {

                   if(keyCode == KeyEvent.KEYCODE_BACK&& mWebView.canGoBack()) {

                            mWebView.goBack();// 返回前一个页面

                            return true;

                   }

                   returnsuper.onKeyDown(keyCode, event);

         }

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值