WebView
java.lang.Object
-android.view.View
--andorid.view.ViewGroup
---android.widget.AbsoluteLayout
----android.webkit.WebView
注意,为了使您在activity中嵌入的webview能够访问网络和加载网页信息,你必须在AndroidMenifest文件中加入INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />
更多信息请参阅Build Web App in WebView http://developer.android.com/guide/webapps/webview.html
Uri uri = Uri.parse("http://www.example.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
在你自己的activity中使用,在layout中布局一个,或者在onCreate方法中把整个activity窗口设置成webView
WebView webview = new WebView(this);
setContentView(webview);
// if there is an error loading this page (see below).
webview.loadUrl("http://slashdot.org/");
// OR, you can also load from an HTML string:
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
// ... although note that there are restrictions on what this HTML can do.
// See the JavaDocs for loadData() and loadDataWithBaseURL() for more info.
一个WebView具有一些可自定义的地方让你加入自己的行为,例如:
※创建并设置一个WebChromeClient子类,当某些可以影响你浏览器UI的事件发生时就会调用这个类。例如:进度条更新和JavaScript弹出框出现
※创建病设置一个WevViewClient子类,当某些影响到你内容渲染的东西出现时会被调用,例如:错误和表单表单提交,你也可以通过shouldOverrideUrlLoading
※修改WebSetting,例如:使用setJavascriptEnabled()方法启用JavaScript
※使用addJavascriptInterface(Object string)方法将java对象注入到WebView,这个方法允许你将java对象注入到一个网页的javascript context中,这样就可以在网页的javascript中访问了。
// 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/");
默认情况下,WebView会按中密度的显示效果缩放一个网页,所以,他会在高密度屏幕上做一个1.5倍的扩大,而在低密度屏幕上做一个0.75倍的缩小。从2.0开始,webview支持DOM,CSS,和meta标签,来帮助你适配不同密度的屏幕。
一下是一个特征的总结,来帮助你处理不同的屏幕分辨率:
※ window.devicePixelRatio DOM属性。这个属性的值指定了在这个屏幕上默认缩放规格。举个例子来说,如果 window.devicePixelRatio 的值为1.0,设备被人为是中密度屏幕,网页不会执行默认的缩放;如果值为1.5,设备被认为是高密度屏,会执行1.5倍的缩放;如果值为0.75,则被认为为低密度屏,则进行0.75倍的缩放。
※-webkit-device-pixel-ratio CSS属性的媒体查询。它指定了屏幕密度,以及哪一个属性栏要适用于这个屏幕密度。对应的值应该是0.75、1或者1.5,指定了属性将适用于中密度、高密度、低密度设备。例如:
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />
以上的hdpi.css文件仅仅适用于高密度屏幕
java.lang.Object
-android.view.View
--andorid.view.ViewGroup
---android.widget.AbsoluteLayout
----android.webkit.WebView
OverView
一个展示网页的View,这是一个基础类,是您可以使用自己的Web浏览器或简单的展示你activity中的一些在线内容。它使用了WebKit渲染引擎,包括了一下方法:向前向后历史导航、缩放、进行文字搜索等等。注意,为了使您在activity中嵌入的webview能够访问网络和加载网页信息,你必须在AndroidMenifest文件中加入INTERNET权限。
<uses-permission android:name="android.permission.INTERNET" />
更多信息请参阅Build Web App in WebView http://developer.android.com/guide/webapps/webview.html
Basic usage
默认的,一个WebView提供了一个类似浏览器的控件,不支持javascript和忽略了网页错误信息。如果你的目标仅仅是在你的UI中展示一些HTML,WebView的功能足以;用户除了读页面以外不需要与网页交互,网页也不需要与用户交互。如果你真想要一个成熟的浏览器,那么你可能想要使用URL Intent调用Browser应用而不是简单的WebView中展示。例如:Uri uri = Uri.parse("http://www.example.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
在你自己的activity中使用,在layout中布局一个,或者在onCreate方法中把整个activity窗口设置成webView
WebView webview = new WebView(this);
setContentView(webview);
然后Load你想要的网页:
// if there is an error loading this page (see below).
webview.loadUrl("http://slashdot.org/");
// OR, you can also load from an HTML string:
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
// ... although note that there are restrictions on what this HTML can do.
// See the JavaDocs for loadData() and loadDataWithBaseURL() for more info.
一个WebView具有一些可自定义的地方让你加入自己的行为,例如:
※创建并设置一个WebChromeClient子类,当某些可以影响你浏览器UI的事件发生时就会调用这个类。例如:进度条更新和JavaScript弹出框出现
※创建病设置一个WevViewClient子类,当某些影响到你内容渲染的东西出现时会被调用,例如:错误和表单表单提交,你也可以通过shouldOverrideUrlLoading
※修改WebSetting,例如:使用setJavascriptEnabled()方法启用JavaScript
※使用addJavascriptInterface(Object string)方法将java对象注入到WebView,这个方法允许你将java对象注入到一个网页的javascript context中,这样就可以在网页的javascript中访问了。
// 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/");
Zoom
启用内置缩放,可以调用 WebSettings.setBuiltInZoomControls(boolean)使用缩放时如果高度或宽度设置为WRAP_CONTENT可能会导致未定义的行为,应该避免。Cookies and window management
因为明显的安全原因,你的app具有他自己的缓存、cookies存储等。他不能共享Browser的数据 默认的,HTML发出的打开新的窗口的请求是禁止的,包含javascript打开的和超链接标签打开的。你可以自定义你的WebChromeClient提供自己的行为打开多个窗口,用任何你想要的方式去渲染他们Build web page to support different screen densities
一个设备的屏幕密度是基于设备的屏幕分辨率。一个低密度的屏幕,每英寸可用像素比较少,反之高密度的屏幕每英寸可用像素多。品目密度比较重要,在其他条件一样的情况下,一个宽和高固定像素的UI控件,在低密度屏上看上去比较大而在高密度屏上显示的比较小,为简单起见,android把所有的各种密度的屏幕区分为广义的三红密度:高,中,低默认情况下,WebView会按中密度的显示效果缩放一个网页,所以,他会在高密度屏幕上做一个1.5倍的扩大,而在低密度屏幕上做一个0.75倍的缩小。从2.0开始,webview支持DOM,CSS,和meta标签,来帮助你适配不同密度的屏幕。
一下是一个特征的总结,来帮助你处理不同的屏幕分辨率:
※ window.devicePixelRatio DOM属性。这个属性的值指定了在这个屏幕上默认缩放规格。举个例子来说,如果 window.devicePixelRatio 的值为1.0,设备被人为是中密度屏幕,网页不会执行默认的缩放;如果值为1.5,设备被认为是高密度屏,会执行1.5倍的缩放;如果值为0.75,则被认为为低密度屏,则进行0.75倍的缩放。
※-webkit-device-pixel-ratio CSS属性的媒体查询。它指定了屏幕密度,以及哪一个属性栏要适用于这个屏幕密度。对应的值应该是0.75、1或者1.5,指定了属性将适用于中密度、高密度、低密度设备。例如:
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />
以上的hdpi.css文件仅仅适用于高密度屏幕