《安卓网络编程》之第五篇 WebView的使用

  Android提供了WebView组件,,在Android的所有组件中,WebView的功能是最强大的,是当之无愧的老大。WebView组件本身就是一个浏览器实现,她的内核是基于开源WebKit引擎。

 main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:background="@drawable/white"
 6     android:orientation="vertical" >
 7     
 8    <LinearLayout
 9     android:orientation="horizontal"
10     android:background="@drawable/white"
11     android:layout_width="fill_parent"
12     android:layout_height="wrap_content">
13           <EditText
14           android:id="@+id/myEditText1" 
15           android:layout_width="0dp"
16           android:layout_weight="1"
17           android:layout_height="wrap_content"
18           android:textSize="18sp"
19           android:hint="输入网址" />
20           <!-- 建立一个ImageButton -->
21           <ImageButton
22           android:id="@+id/myImageButton1"
23           android:layout_width="wrap_content"
24           android:layout_marginTop="6dp"
25           android:layout_height="wrap_content"
26           android:background="@drawable/white"
27           android:src="@drawable/go"
28           />
29  </LinearLayout>
30   <!-- 建立一个WebView -->
31   <WebView 
32   android:id="@+id/myWebView1" 
33   android:layout_height="fill_parent" 
34   android:layout_width="fill_parent" 
35   android:background="@drawable/black" 
36   android:focusable="false"
37   /> 
38 </LinearLayout>

主程序:

 1 package irdc.wang;
 2 import android.app.Activity;
 3 import android.os.Bundle;
 4 import android.view.KeyEvent;
 5 import android.view.View;
 6 import android.webkit.WebView;
 7 import android.webkit.WebViewClient;
 8 import android.widget.EditText;
 9 import android.widget.ImageButton;
10 import android.widget.Toast;
11 
12 public class wang extends Activity
13 {
14 
15   private ImageButton mImageButton1;
16   private EditText mEditText1;
17   private WebView mWebView1;
18   private String str;
19 
20   /** Called when the activity is first created. */
21   @Override
22   public void onCreate(Bundle savedInstanceState)
23   {
24     super.onCreate(savedInstanceState);
25     setContentView(R.layout.main);
26 
27     mImageButton1 = (ImageButton) findViewById(R.id.myImageButton1);
28     mEditText1 = (EditText) findViewById(R.id.myEditText1);
29     mWebView1 = (WebView) findViewById(R.id.myWebView1);
30     
31     mWebView1.getSettings().setJavaScriptEnabled(true);//使浏览器支持JavaScript
32     
33     mWebView1.setWebViewClient(new WebViewClient() {
34       public boolean shouldOverrideUrlLoading(WebView view,String url) {
35         view.loadUrl(url);
36         return true;     
37       }
38     });//点击链接在当前Browser中响应
39     
40     mImageButton1.setOnClickListener(new ImageButton.OnClickListener()
41     {
42       @Override
43       public void onClick(View arg0)
44       {
45         {
46           mImageButton1.setImageResource(R.drawable.go_2);
47           str = mEditText1.getText().toString();
48           if(str.indexOf("http:\\\\")<0) {
49             str = "http:\\\\"+str;
50           }
51           String strURI = str;
52           mWebView1.loadUrl(strURI);
53           Toast.makeText(wang.this, getString(R.string.load) + strURI,
54               Toast.LENGTH_LONG).show();
55         }
56       }
57     });
58     
59   }
60 
61   @Override
62   public boolean onKeyDown(int keyCode, KeyEvent event)
63   {
64     if((keyCode == KeyEvent.KEYCODE_BACK) && mWebView1.canGoBack()) {
65       mWebView1.goBack();
66       return true;      
67     }
68     if((keyCode == KeyEvent.KEYCODE_MENU) && mWebView1.canGoForward()) {
69       mWebView1.goForward();
70       return true;      
71     }
72     return super.onKeyDown(keyCode, event);
73   }
74    
75 }

浏览器支持前进(menu按钮),回退功能(back),效果如下图:

 

使用WebView的注意事项

在开发过程中应该注意几点: 
    1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
    2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
        webview.getSettings().setJavaScriptEnabled(true);  
    3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。

1 mWebView.setWebViewClient(new WebViewClient(){       
2                     public boolean shouldOverrideUrlLoading(WebView view, String url) {       
3                         view.loadUrl(url);       
4                         return true;       
5                     }       
6         });  

 

4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。

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     }     

 源码传送门

 

posted @ 2015-03-25 17:58  疾风剑  阅读(363)  评论(0编辑  收藏  举报