android:使用WebView, WebChromeClient和WebViewClient加载网页
16lz
2021-01-26
在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android
主程序:
要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript;
等等,具体参考API
而进度条的使用是在new出一个setWebChromeClient后,可以在内部类中写
onProgressChanged事件
在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:
WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 :
中提供了其很好的支持,下面是一个例子程序,先帖:
[html] view plain copy
- <?xmlversion="1.0"encoding="utf-8"?>
- <WebViewxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/webView"android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
主程序:
[java] view plain copy
- publicclassWebPageLoaderextendsActivity
- {
- finalActivityactivity=this;
- @Override
- publicvoidonCreate(BundlesavedInstanceState)
- {
- super.onCreate(savedInstanceState);
- this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
- setContentView(R.layout.main);
- WebViewwebView=(WebView)findViewById(R.id.webView);
- webView.getSettings().setJavaScriptEnabled(true);
- webView.getSettings().setSupportZoom(true);
- webView.setWebChromeClient(newWebChromeClient()
- {
- publicvoidonProgressChanged(WebViewview,intprogress)
- {
- activity.setTitle("Loading...");
- activity.setProgress(progress*100);
- if(progress==100)
- activity.setTitle(R.string.app_name);
- }
- }
- );
- webView.setWebViewClient(newWebViewClient(){
- publicvoidonReceivedError(WebViewview,interrorCode,Stringdescription,StringfailingUrl)
- {//Handletheerror
- }
- publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl)
- {
- view.loadUrl(url);
- returntrue;
- }
- });
- webView.loadUrl("http://www.sohu.com");
- }
- }
要注意的是,其中的webView的一系列用法,比如 webView.getSettings().setJavaScriptEnabled(true);设置可以使用javscript;
[java] view plain copy
- webView.getSettings().setJavaScriptEnabled(true);
- webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
- webView.setHorizontalScrollBarEnabled(false);
- webView.getSettings().setSupportZoom(true);
- webView.getSettings().setBuiltInZoomControls(true);
- webView.setInitialScale(70);
- webView.setHorizontalScrollbarOverlay(true);
等等,具体参考API
而进度条的使用是在new出一个setWebChromeClient后,可以在内部类中写
onProgressChanged事件
在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:
[java] view plain copy
- onLoadResource
- onPageStart
- onPageFinish
- onReceiveError
- onReceivedHttpAuthRequest
WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 :
[java] view plain copy
- onCloseWindow(关闭WebView)
- onCreateWindow()
- onJsAlert(WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
- onJsPrompt
- onJsConfirm
- onProgressChanged
- onReceivedIcon
- onReceivedTitle
更多的时候,你可以这样
[java] view plain copy
- WebViewwebView;
- webView=(WebView)findViewById(R.id.webview);
- webView.setWebChromeClient(newWebChromeClient());
- webView.setWebViewClient(newWebViewClient());
- webView.getSettings().
- setJavaScriptEnabled(true);
- webView.loadUrl(url);
更多相关文章
- Android事件分发机制的探索与发现之View篇
- Android通话默认打开扬声器
- android 学习四 加载图片
- android WebView(三)WebViewClient
- Android(安卓)xml 解析
- android post数据到服务器端工具类(包括postjson字符串、键值对)
- Android(安卓)传感器(Sensor)API教程 (二) 传感器事件
- CheckBox in ListView
- Android中WebViewClient与WebChromClient两个类的区别