《安卓网络编程》之第五篇 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 }