在Android开发中,使用WebView控件,可以很方便的实现Web浏览器的功能。

WebView官方详细文档: http://developer.android.com/reference/android/webkit/WebView.html

使用WebView加载一个网页很简单:

    WebView webView = new WebView(this);    webView.loadUrl("http://www.google.com/");

加载apk包中的一个html页面的方法:

webView.loadUrl("file:///android_asset/test.html");

加载手机本地的一个html页面的方法:

webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");

WebView中有很多设置,可以用来开启或禁用插件,JavaScript等:

    webView.getSettings().setPluginsEnabled(true);    webView.getSettings().setJavaScriptEnabled(true);    webView.getSettings().setSupportMultipleWindows(true);


如果要监听WebView的各种通知,请求。可以使用一个自定义的WebViewClient:

    public class MyWebViewClient extends WebViewClient    {    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url)     {    view.loadUrl(url);    return true;    }@Overridepublic void doUpdateVisitedHistory(WebView view, String url,boolean isReload){// TODO Auto-generated method stubsuper.doUpdateVisitedHistory(view, url, isReload);}@Overridepublic void onFormResubmission(WebView view, Message dontResend,Message resend){// TODO Auto-generated method stubsuper.onFormResubmission(view, dontResend, resend);}@Overridepublic void onLoadResource(WebView view, String url){// TODO Auto-generated method stubsuper.onLoadResource(view, url);}@Overridepublic void onPageFinished(WebView view, String url){// TODO Auto-generated method stubsuper.onPageFinished(view, url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon){// TODO Auto-generated method stubsuper.onPageStarted(view, url, favicon);}@Overridepublic void onReceivedError(WebView view, int errorCode,String description, String failingUrl){// TODO Auto-generated method stubsuper.onReceivedError(view, errorCode, description, failingUrl);}@Overridepublic void onReceivedHttpAuthRequest(WebView view,HttpAuthHandler handler, String host, String realm){// TODO Auto-generated method stubsuper.onReceivedHttpAuthRequest(view, handler, host, realm);}@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error){// TODO Auto-generated method stubsuper.onReceivedSslError(view, handler, error);}@Overridepublic void onScaleChanged(WebView view, float oldScale, float newScale){// TODO Auto-generated method stubsuper.onScaleChanged(view, oldScale, newScale);}@Overridepublic void onTooManyRedirects(WebView view, Message cancelMsg,Message continueMsg){// TODO Auto-generated method stubsuper.onTooManyRedirects(view, cancelMsg, continueMsg);}@Overridepublic void onUnhandledKeyEvent(WebView view, KeyEvent event){// TODO Auto-generated method stubsuper.onUnhandledKeyEvent(view, event);}@Overridepublic boolean shouldOverrideKeyEvent(WebView view, KeyEvent event){// TODO Auto-generated method stubreturn super.shouldOverrideKeyEvent(view, event);}    }


然后将其设置到WebView中:

    MyWebViewClient webViewClient=new MyWebViewClient();    webView.setWebViewClient(webViewClient);

如果是要自定义页面的显示,如:JavaScript提示框,网站图标,加载进度条等,则可以自定义一个WebChromeClient

    public class MyWebChromeClient extends WebChromeClient    {    @Override    public void onProgressChanged(WebView view, int newProgress)    {    if(newProgress==100)    {    view.setVisibility(View.VISIBLE);    }    }@Overridepublic Bitmap getDefaultVideoPoster(){// TODO Auto-generated method stubreturn super.getDefaultVideoPoster();}@Overridepublic View getVideoLoadingProgressView(){// TODO Auto-generated method stubreturn super.getVideoLoadingProgressView();}@Overridepublic void getVisitedHistory(ValueCallback callback){// TODO Auto-generated method stubsuper.getVisitedHistory(callback);}@Overridepublic void onCloseWindow(WebView window){// TODO Auto-generated method stubsuper.onCloseWindow(window);}@Overridepublic boolean onConsoleMessage(ConsoleMessage consoleMessage){// TODO Auto-generated method stubreturn super.onConsoleMessage(consoleMessage);}@Overridepublic void onConsoleMessage(String message, int lineNumber,String sourceID){// TODO Auto-generated method stubsuper.onConsoleMessage(message, lineNumber, sourceID);}@Overridepublic boolean onCreateWindow(WebView view, boolean dialog,boolean userGesture, Message resultMsg){// TODO Auto-generated method stubreturn super.onCreateWindow(view, dialog, userGesture, resultMsg);}@Overridepublic void onExceededDatabaseQuota(String url,String databaseIdentifier, long currentQuota,long estimatedSize, long totalUsedQuota,QuotaUpdater quotaUpdater){// TODO Auto-generated method stubsuper.onExceededDatabaseQuota(url, databaseIdentifier, currentQuota,estimatedSize, totalUsedQuota, quotaUpdater);}@Overridepublic void onGeolocationPermissionsHidePrompt(){// TODO Auto-generated method stubsuper.onGeolocationPermissionsHidePrompt();}@Overridepublic void onGeolocationPermissionsShowPrompt(String origin,Callback callback){// TODO Auto-generated method stubsuper.onGeolocationPermissionsShowPrompt(origin, callback);}@Overridepublic void onHideCustomView(){// TODO Auto-generated method stubsuper.onHideCustomView();}@Overridepublic boolean onJsAlert(WebView view, String url, String message,JsResult result){// TODO Auto-generated method stubreturn super.onJsAlert(view, url, message, result);}@Overridepublic boolean onJsBeforeUnload(WebView view, String url,String message, JsResult result){// TODO Auto-generated method stubreturn super.onJsBeforeUnload(view, url, message, result);}@Overridepublic boolean onJsConfirm(WebView view, String url, String message,JsResult result){// TODO Auto-generated method stubreturn super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result){// TODO Auto-generated method stubreturn super.onJsPrompt(view, url, message, defaultValue, result);}@Overridepublic boolean onJsTimeout(){// TODO Auto-generated method stubreturn super.onJsTimeout();}@Overridepublic void onReachedMaxAppCacheSize(long spaceNeeded,long totalUsedQuota, QuotaUpdater quotaUpdater){// TODO Auto-generated method stubsuper.onReachedMaxAppCacheSize(spaceNeeded, totalUsedQuota, quotaUpdater);}@Overridepublic void onReceivedIcon(WebView view, Bitmap icon){// TODO Auto-generated method stubsuper.onReceivedIcon(view, icon);}@Overridepublic void onReceivedTitle(WebView view, String title){// TODO Auto-generated method stubsuper.onReceivedTitle(view, title);}@Overridepublic void onReceivedTouchIconUrl(WebView view, String url,boolean precomposed){// TODO Auto-generated method stubsuper.onReceivedTouchIconUrl(view, url, precomposed);}@Overridepublic void onRequestFocus(WebView view){// TODO Auto-generated method stubsuper.onRequestFocus(view);}@Overridepublic void onShowCustomView(View view, CustomViewCallback callback){// TODO Auto-generated method stubsuper.onShowCustomView(view, callback);}        }

这些方法中,只需要实现自己需要的就可以了。

然后把自定义的client注册到WebView中去:

    MyWebChromeClient webChromeClient=new MyWebChromeClient();    webView.setWebChromeClient(webChromeClient);



更多相关文章

  1. android系统关机源码(9.0)流程分析
  2. android标题栏进度圈使用方法
  3. Android重写onOreate,onPause,onStop等方法时需要注意的问题!
  4. XML解析
  5. Android手机端加载电脑端网页
  6. android 比较有用的方法总结
  7. 运行Android项目,报错java.lang.IllegalAccessException: access
  8. System.EntryPointNotFoundException: Unable to find an entry
  9. 解决WebView加载URL跳转到系统浏览器的问题

随机推荐

  1. Android 短信备份完整版
  2. [Android Pro] proguard.cfg 配置文件
  3. android 开发之Activity切换
  4. QQ上的tabhost效果
  5. android软键盘开关
  6. Android与服务器通信的方法之一-->TCP
  7. android 项目练习:自己的词典app——生词
  8. android实现自动提示功能
  9. android中的tab
  10. android camera2 api点击图片实现聚焦