webView使用方法小结

时间:2022-10-29 15:38:58


1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2、在要Activity中生成一个WebView组件:WebView webView = new WebView(this);
3、设置WebView基本信息:
如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true); 
触摸焦点起作用
requestFocus();
取消滚动条
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com"); 
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets文件中
5、如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。
给WebView添加一个事件监听对象(WebViewClient) 
并重写其中的一些方法
shouldOverrideUrlLoading:对网页中超链接按钮的响应。
当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url 
onLoadResource 
onPageStart 
onPageFinish 
onReceiveError
onReceivedHttpAuthRequest
6、如果用webview点链接看了很多页以后,如果不做任何处理,点击系统“Back”键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。
覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。
[java] view plaincopyprint?
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack(); //goBack()表示返回webView的上一页面
return true;
}
return false;

8、webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

9、
* 通过WebSettings设置WebView的一些属性、状态。通过webView.getSettings获得
 例如:setAllowFileAccess(是否能访问文件数据) 
  setBuiltInZoomControls(设置是否支持缩放)、
  setCacheMode(设置缓冲的模式)
  setJavaScriptEnabled(设置是否支持JavaScript)........


* 通过WebViewClient来自定义网页浏览程序。专门辅助WebView处理各种通知、请求等事件的类。      通过webView.setWebChromeClient获得
 方法:
  doUpdateVisitedHistory (更新历史记录)
  onFormResubmission(应用程序重新请求网页数据)
  onLoadResource(加载指定地址提供的资源)
  onPageFinished(网页加载完毕)
  onPageStarted(网页开始加载)
  onReceivedError(报告错误信息)
  onScaleChanged(WebView发生改变)
  shouldOverrideUrlLoading(控制新的连接在当前WebView中打开)


* WebChromeClient专门用来辅助WebView处理JavaScript的对话框、图标、网站标题、加载进度等。
 方法:onCloseWindow(关闭WebView)
  onCreateWindow(创建WebView)
  onJsAlert(处理Js中的Alert对话框)、onJsConfirm(处理Js中的Confirm对话框)、onJsPrompt(处理JS中的Prompt对话框)
  onProgressChanged(加载进度条改变)
  onReceivedIcon(网页图标更改)
  onReceivedTitle(网页标题更改)
  onRequestFocus(WebView显示焦距)


package com.dan;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.URLUtil;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;


public class WebActivity extends Activity {


 private WebView webView;
 private EditText urlEdt;
 private Button btn;
 
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.web);
  
  urlEdt = (EditText)findViewById(R.id.edt_1);
  btn = (Button)findViewById(R.id.btn_1);
  
  webView = (WebView)findViewById(R.id.web);
  WebSettings settings = webView.getSettings();
  //webView.loadUrl("http://10.0.2.2/affiliate/code/login.php");
  //设置支持Js脚本
  settings.setJavaScriptEnabled(true);
  //设置可以访问文件
  settings.setAllowFileAccess(true);
  //支持缩放
  settings.setBuiltInZoomControls(true);
  //设置WebViewClient
  webView.setWebViewClient(new WebViewClient(){
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
   }


   @Override
   public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
   }


   @Override
   public void onPageStarted(WebView view, String url, Bitmap favicon) {
    super.onPageStarted(view, url, favicon);
   }
   
  });
  //设置WebChromeClient
  webView.setWebChromeClient(new WebChromeClient(){


   @Override
   public boolean onJsAlert(WebView view, String url, String message,
     JsResult result) {
    AlertDialog.Builder alert = new AlertDialog.Builder(WebActivity.this);
    alert.setTitle("提示对话框");
    alert.setMessage(message).setPositiveButton("确定", new OnClickListener() {
     public void onClick(DialogInterface dialog, int which) {
     }
    });
    alert.create().show();
    return true;
   }


   @Override
   public boolean onJsConfirm(WebView view, String url,
     String message, JsResult result) {
    return super.onJsConfirm(view, url, message, result);
   }


   @Override
   public boolean onJsPrompt(WebView view, String url, String message,
     String defaultValue, JsPromptResult result) {
    return super.onJsPrompt(view, url, message, defaultValue, result);
   }


   @Override
   public void onProgressChanged(WebView view, int newProgress) {
    WebActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress*100);
    super.onProgressChanged(view, newProgress);
   }


   @Override
   public void onReceivedTitle(WebView view, String title) {
    WebActivity.this.setTitle("中国世贸通加盟管理登录页");
    super.onReceivedTitle(view, title);
   }
   
  });
  
  btn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v) {
    String url = urlEdt.getText().toString();
    if( URLUtil.isNetworkUrl(url) ){
     webView.loadUrl(url);
    }else{
     urlEdt.setHint("输入的网址错误,请重新输入");
    }
    
   }
  });
  
 }


}
* 后退 和 前进  canGoBack 与canGoForward
//后退
if( (keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack() ){
 webView.goBack();
 return true;
}


将Html代码通过String的形式被加载到WebView中,而且在Html中可以引用存储在设备中的图片资源等。这个方式可以非常方便的实现RichTextField的效果,尤其是对某些程序提供一些本地的简单文档时,非常方便。


下边是实现这个功能的源代码:


public void loadHTML() {        final String mimeType = "text/html";        final String encoding = "utf-8";        final String html = "<h1>Header</h1><p>Custom HTML</p>                          <p><img src=\"file:///android_asset/image1.jpg\" />                          </p>";        WebView wv = (WebView) findViewById(R.id.wv1);        wv.loadDataWithBaseURL("fake://not/needed", html,                            mimeType, encoding, "");    }   //wView.loadUrl("file:///android_asset/index.html");   -----打开本包内asset目录下的index.html文件  //wView.loadUrl("content://com.android.htmlfileprovider/sdcard/index.html"); -----打开本地sd卡内的index.html文件 //wView.loadUrl("http://wap.baidu.com"); -----打开指定URL的html文件 ......
webView.setInitialScale(30); //这个就是重点,你可以在这里根据需求来设置缩放比例