android中webView的设置

来源:互联网 发布:微信预约排号系统源码 编辑:程序博客网 时间:2024/06/03 17:26

在开发过程中,发现webView在使用时需要设置较多的参数,进行总结如下.

webView的官方API是:http://www.android-doc.com/reference/android/webkit/WebView.html

webView的继承关系如下:


webView采用WebKit渲染引擎来显示网页,能够先前和向后导航,能够放大和缩小,能够进行文本搜索等。WebKit是一个开源的浏览器引擎。Safari、Chrome都是基于WebKit的。

为了让程序能够连接网络,在webView中loadURL,需要再AndroidManifest.xml中添加INTERNET权限。

<uses-permission android:name="android.permission.INTERNET" />
在默认情况下,webView没有提供类似于浏览器的窗口小部件,不支持JavaScript,而且忽略网页错误。如果你的目标只是显示一些HTML作为UI的一部分,用于不需要与web进行交互,那么webView可行。如果你需要一个完全成熟的web浏览器,那么就需要用调用一个应用程序,而不是用webView进行显示。

 Uri uri = Uri.parse("http://www.example.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);
1. webView加载网页的方法:

 // 加载网页,但是不会抛出异常 webview.loadUrl("http://slashdot.org/"); // 加载HTML字符串 String summary = "<html><body>You scored <b>192</b> points.</body></html>"; webview.loadData(summary, "text/html", null); // 加载本地文件,格式固定的,文件位置 webView.loadUrl(file:///android_assets/XXX.html);

2. 使用webView时,有几个地方需要set自己的方法:

1)创建和设置WebChromeClient类。当会影响到用户所看得到的UI界面时将会被调用,例如进度更新或者JS的告警等。

2)创建和设置WebViewClient类,当影响了内容的呈现、渲染时会被调用,例如错误等。还可以截取URL转载在这里(通过shouldOverrideUrlLoading()方法)。

3)修改WebSettings,例如通过setJavaScriptEnable()启动JavaScript。在设置为true后,webView能够加载JS

4)通过addJavascriptInterface(Object, String)方法为webView绑定一个Java对象,这个方法为JavaScript绑定了一个Java对象,可以通过这个对象访问JS。

下面这个例子呈现了如何进行错误处理、设置和进度更新。

 // Let's display the progress in the activity title bar, like the // browser app does. getWindow().requestFeature(Window.FEATURE_PROGRESS); webview.getSettings().setJavaScriptEnabled(true); final Activity activity = this; webview.setWebChromeClient(new WebChromeClient() {   public void onProgressChanged(WebView view, int progress) {     // Activities and WebViews measure progress with different scales.     // The progress meter will automatically disappear when we reach 100%     activity.setProgress(progress * 1000);   } }); webview.setWebViewClient(new WebViewClient() {   public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {     Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();   } }); webview.loadUrl("http://developer.android.com/");

3. WebChromeClient

WebChromeClient直接继承自Object类,主机通知当前界面改变的回调接口。主要辅助webView处理JavaScript的对话框、网站图标、网站title、加载进度条等。

例如:

onCloseWindow()  关闭webView

onCreatWindow()

onJsAlert()   webView上alert无效,需要定制WebChromeClient处理

onJsPrompt()

onJsConfirm()

onProgressChanged()

onReceivedIcon()

onReceivedTitle()

4. WebViewClient

webViewClient用于辅助webVIew处理各种停止、请求事件,主要包括:

onLoadResource()

onPageStart()

onPageFinish()

onReceiveError()

onReceivedHttpAuthRequest()

5. 与JS交互

Activity的代码:

public class MainActivity extends Activity {private WebView webView;private Context context;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = this;webView = (WebView) findViewById(R.id.wv);// 不使用缓存webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);// 支持JavaScriptwebView.getSettings().setJavaScriptEnabled(true);webView.setWebChromeClient(new WebChromeClient());webView.setWebViewClient(new WebViewClient());// JS回调AndroidwebView.addJavascriptInterface(new JSCallBack(), "JSCallBack");webView.loadUrl("http://haojiazhang123.com/share/shop/education_market.html");}// JS回调Androidpublic class JSCallBack {@JavascriptInterfacepublic void jsCallBack(String orderInfo) {// orderInfo是JS传入的参数Toast.makeText(context, "JS调用Android", Toast.LENGTH_SHORT).show();}}// Android回调JSprivate void callJSPayResult(String payResult) {webView.loadUrl("javascript:alipayCallBack('" + payResult + "')");}}
xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent">    <WebView        android:id="@+id/wv"        android:layout_width="match_parent"        android:layout_height="match_parent"/></RelativeLayout>
AndroidManifest.xml要加上访问网络的权限
<uses-permission android:name="android.permission.INTERNET" />

6. webView的其他常用设置

private void init() {WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);// 自适应屏幕settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(true);// 不支持缩放(如果要支持缩放,html页面本身也要支持缩放:不能加user-scalable=no)settings.setBuiltInZoomControls(false);settings.setSupportZoom(false);settings.setDisplayZoomControls(false);// 隐藏scrollbarsetVerticalScrollBarEnabled(false);setHorizontalScrollBarEnabled(false);// 支持通过js打开新的窗口settings.setJavaScriptCanOpenWindowsAutomatically(true);}/** * 禁用网页上的点击事件 */public void setNoClick() {setClickable(false);setLongClickable(false);setFocusable(false);setFocusableInTouchMode(false);setVerticalScrollBarEnabled(false);setHorizontalScrollBarEnabled(false);}

0 0
原创粉丝点击