本人是一名大二的学生,想学博客来提高自己顺便给别人一点帮助,本来呢是想写一篇关于webView的用法,但自己其实也不是很了解,于是去翻了下android文档,感觉基础都讲的好全,于是直接就把他翻译下来了,可能有些地方翻译的不到位,欢迎指出,其实写博客呢也是想认识更多学android的人,以后可以一起交流,下面就是正文了,感觉文档还是很重要的,有时候文档会比你百度出来的答案更好,更详细,所以楼主也意识到英语重要性,可怜的楼主4级还没过,还有一个月就要考四级了,(⊙v⊙) extends AbsoluteLayout
implements ViewTreeObserver.OnGlobalFocusChangeListener ViewGroup.OnHierarchyChangeListener
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.AbsoluteLayout





android.webkit.WebView


类的概述

一个可以展示网页的的视图,这个类是你可以在活动里面滚动你自己的网页或者简单的展示在线的内容的基础,他用

的是Webkit渲染引擎来展示你的网页,包括一些方法来导航向前或则向后来浏览你的浏览历史,缩放你,执行文本搜

索,或者更多。

需要注意的是,为了让你的的活动能够连接入互联网和加载网页在webView里面,你必须增加 intent 权限在你的

AndroidManifest这个文件里写权限
<pre style="font-size: 13px; margin-top: 0px; margin-bottom: 1em; color: rgb(0, 102, 0); font-stretch:<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: rgb(51, 51, 51);">normal; line-height: 18px; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; -webkit-font-smoothing: subpixel-antialiased; padding: 1em; overflow: auto; border: 1px solid rgb(221, 221, 221); background: rgb(247, 247, 247);"><uses-permission android:name="android.permission.INTERNET" /></span>
 
 这个必须是element 的子类如果需要更多的信息,阅读Building Web Apps in WebView

基础的使用

默认的,webView 是不提供浏览器小部件的,不支持js和网页的错误会被忽略,如果你的目标仅是展示 仅用 Html写

的网页作为你ui的一部分,这可能webview可能对你来说可能是很好用的,app的使用者不需要和网页交互,如果你

确实需要需要一个完整的网页浏览器,你可能用URL intent来调用浏览器而不是把他展示在WebView上,例如
Uri uri = Uri.parse("http://www.example.com");Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);


可以查看intent来获得更多信息

为了提供一个WebView在你自己的活动中,你需要在你的活动中包含一个<webView>的布局,或者把一

整个完整的活动作为一个webview

WebView webview = new WebView(this);setContentView(webview);
接下来加载页面
// Simplest usage: note that an exception will NOT be thrown// 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可以有很多自定义点来添加你的自己的行为,有以下:

·创建并且重写 webChomeCLient 这个子类,这个子类会被调用当某些进程影响到浏览器的用户界面时,例如,进



更新或者js发出通知可以在这里写(详细看Debugging Task).

·创建并重写WebViewClient 这个子类,它会被调用当有些进程会影响到内容的渲染,eg(我也不知道是啥),错误



发生,或者表单的提交。

·改变Websetting,例如用setJavaScriptEnabled(),这里来设置支持js

·使用 addJavaScriptInterface(obeject,String)这个方法来将你的java对象绑定到webView上,这个方法允许你js可以

调用java对象

下面是是一个相比上面那个例子更为复杂的例子。。。。好像有点绕,展示了错误的处理,webView的设置,还有

进程通知

// 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

为了使webView能够内置缩放,可以通过使用Websetting的setBuiltInZoomcontrols(boolean)(在版本为cupcake

有介绍)

需要注意的是:使用缩放这个功能,但是你设置webView宽和高是 WRAP_CONTENT 可能会导致未定义的行为发

生,这个需要避免

Cookie and window management

为了安全起见,你的写的app需要有自己的缓存,和cookies Store(什么是cookieStore?楼主在翻译这篇文章的时

候也不知道

cookie详解,讲的很好,楼主一看就懂,何况是你们呢,哈哈),这样的话就不会把浏览器的数据就不容易泄露出去了。

默认的情况

通过HTML打开新的窗口的请求会被忽略,论是通过js还目标属性的链接(楼主也不太懂),总之你可以设置

WebChomeClient来打开多个浏览窗口

建立网来适配不同分辨率的屏幕

屏幕的像素密度是和屏幕分辨率有关的(所谓的像素的密度就是就是屏幕每英寸的有的像素 ,所以密度越高,每英

寸像素就越

多),屏幕的像素的密度是一个很重要的东西,因为在其他条件都相同的情况下,一个ui元素,比如一个按钮宽高被

设置好后,在
像素密度低的时候回显示的比较大,在像素密度的比较高的时候就会比较小(有人可能会问,android

不是有dp这个神奇的单位,然而这里加载的是网页,使用html写的,一般在css里面设置他的大小,楼主帮忙做的一

个写app的webView显示的网页就是我写

的,对于一个之前没接触过前端的我来说简直就是一个巨坑,不过期间也收获了很多,好像扯远了。。。我继续翻

译。。)为了简单起见,android屏幕像素密度划分为高,中,低三个等级

默认的情况下,web视图缩放一个网页,以便它被绘制在中等密度的屏幕上的尺寸相匹配的默认外观,因此,android

会申请1.5倍的扩展在高像素密度的屏幕上和0.75倍的扩展在低像素密度的屏幕上,自从ECLAIR这个版本后,WebView

支持DOM,CSS,和meta这个标签的属性来帮助你的webView适配不同分辨率的屏幕

一下是用来处理不同分辨率的屏幕的方法的总结

· window.devicePixelRatio DOM属性,这个属性的值用于指定了默认的比例因素来用于当前的设备,例如,

window.devicePxelRatio这个的值是1.0的话,则该设备会被认为是中等像素密度,则不会被缩放,如果值是1.5的

话,则设备会被

认为是高密度的设备,则进行有1.5倍的放大,如果为0.75,设备则会被认为是低密度的设备,网页会被缩小至原来

0.75倍,例如
<link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />


这个hdpi.css 文件仅仅是用于高像素密度的设备,网页将会被放大到原来的1.5倍

HTM5 Video support

为了支持Html5视频在你的应用中,你需要有开启打开硬件加速

Full screen support

为了看视频全屏,你需要设置一个webChromeClient 还有继承onShowCustomView(View,

WebChromeClient.CustomViewCallback)
andonHideCustomView(),如果没有实现这些接口的话,将不能实现全

屏,选择性的继承
getVideoLoadingProgressView(),来自定义视频正在加载。

更多相关文章

  1. Android之博客案例 及 获取指定URL的网页内容
  2. Android中 WebView打开一个网页实例
  3. Android 通过网页打开自己的APP(scheme)
  4. cocos2d-x打开网页android与ios平台
  5. Android 网页html源码的查看器
  6. Android使用WebView.loadUri()打开网页的方法
  7. 【Android Demo】获取指定网页的页面源代码

随机推荐

  1. php中如何进行小写转换?
  2. PHP以正则表达式验证手机号码
  3. 如何实现php中date只显示年月日
  4. 如何解决php中fpm无法启动
  5. 如何解决php连接erp数据库失败
  6. 如何解决在php用gd库输出图片到微信浏览
  7. 详解PHP中php switch的方法实例
  8. 代码分析php中的回调函数
  9. PHP使用 is_numeric的实例解析
  10. PHP 使用 Trait 解决 PHP 单继承问题的实