android中webView的设置

在开发过程中,发现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;
	
	@Override
	protected 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);
		// 支持JavaScript
		webView.getSettings().setJavaScriptEnabled(true);
		webView.setWebChromeClient(new WebChromeClient());
		webView.setWebViewClient(new WebViewClient());
		// JS回调Android
		webView.addJavascriptInterface(new JSCallBack(), "JSCallBack");
		webView.loadUrl("http://haojiazhang123.com/share/shop/education_market.html");
	}
	
	// JS回调Android
	public class JSCallBack {
		@JavascriptInterface
		public void jsCallBack(String orderInfo) {
			// orderInfo是JS传入的参数
			Toast.makeText(context, "JS调用Android", Toast.LENGTH_SHORT).show();
		}
	}
	
	// Android回调JS
	private 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);
				
		// 隐藏scrollbar
		setVerticalScrollBarEnabled(false);
		setHorizontalScrollBarEnabled(false);
		
		// 支持通过js打开新的窗口
		settings.setJavaScriptCanOpenWindowsAutomatically(true);
	}
	
	/**
	 * 禁用网页上的点击事件
	 */
	public void setNoClick() {
		setClickable(false);
		setLongClickable(false);
		setFocusable(false);
		setFocusableInTouchMode(false);
		setVerticalScrollBarEnabled(false);
		setHorizontalScrollBarEnabled(false);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值