webview学习记录

来源:互联网 发布:中小企业网络架构 编辑:程序博客网 时间:2024/05/30 04:45






http://blog.csdn.net/linghu_java/article/details/41215563

http://blog.csdn.net/linghu_java/article/details/41215563

http://blog.csdn.net/linghu_java/article/details/41215563

http://blog.csdn.net/linghu_java/article/details/41215563







 

webview学习记录

分类: Android开发 33人阅读 评论(0) 收藏 举报

目录(?)[+]

 




 webview学习记录.rar (44.56 KB, 下载次数: 345) 


工作中用到了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_dialognull);
                                     // 设置 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() {
                                               // 逻辑代码
               });
                            }
                   }, "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><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.oknewAlertDialog.OnClickListener(){   


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

                });   
                builder.setCancelable(false);  
                builder.create();   
                builder.show();   
                returntrue;   
            }  
            publicboolean onJsConfirm(WebViewview,String url,String message,finalJsResult result){   
                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.cancelnewAlertDialog.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,newAlertDialog.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.onload= 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><ahref="">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_dialognull);
                                     // 设置 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_URInewString[] {
                                                                                             RuiXin.EMAIL, RuiXin.USERNAME,
                                                                                             RuiXin.DATE,RuiXin.SEX}, nullnull,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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 北方黄胡蜂蛰了怎么办 被黄胡蜂蛰了怎么办 北方黄胡蜂蜇了怎么办? 猫咪被蜜蜂蛰了怎么办 猫被蜜蜂蛰了怎么办 猫被马蜂蛰了怎么办 被地雷蜂蛰了怎么办 被葫芦蜂蛰了怎么办 嘴巴被蜜蜂蛰了怎么办 被蜜蜂蜇伤了怎么办 婴儿被蜜蜂蜇了怎么办 婴儿被黄蜂蛰了怎么办 蜜蜂在石头缝里怎么办 中蜂蜂王不产卵怎么办 冲电器充电变慢怎么办 摇号审核通过后怎么办 京东白条开不了怎么办 得了病心里压力大怎么办 电视家看直播卡怎么办 日上提货单丢了怎么办 想直飞香港l签怎么办 u盘识别不出来怎么办 卫生间下水道有小飞虫怎么办 橙光一直闪退怎么办 若白回来了,长安怎么办 没了你以后我该怎么办 玩cf的时候闪退怎么办 婴儿嗓子哭哑了怎么办 宝宝嗓子哭哑了怎么办 小孩嗓子哭哑了怎么办 孩子嗓子哭哑了怎么办 月经来了晚上漏怎么办 在学校月经漏了怎么办 月经来了血下不来怎么办 想让月经快点来怎么办 孩子来月经不规律怎么办 一个月来2次月经怎么办 14岁月经不规律怎么办 不是经期内裤有黑色血怎么办 月经量多血块多怎么办 网友见面没上她怎么办