简单翻译android WebView 官网

30 篇文章 0 订阅
28 篇文章 0 订阅
java.lang.Object的
   ↳ android.view.View
     ↳ android.view.ViewGroup
       ↳ android.widget.AbsoluteLayout
         ↳ android.webkit.WebView

类概述


一个显示网页的视图,这个类在您的Activity上可以简单的显示一些在线内容,从而推出自己定制的浏览器。它使用Webkit渲染引擎来显示网页和其他更多功能包括历史记录向前导航,向后,放大和缩小,执行文本搜索。

想要启用内置的缩放,需要设置WebSettings.setBuiltInZoomControls的(boolean)(介绍在API CUPCAKE中)。请注意,为了一个webview在你的Activity访问互联网和加载网页,你必须添加到你的Android的Manifest文件中的Internet权限:

<uses-permission android:name="android.permission.INTERNET" />

这必须是一个元素的子元素。请查看教程:  Building Web Apps in WebView.。


基本用法

默认情况下,一个网页不提供任何浏览器的插件,不允许javaScript网页错误不可以被忽略。如果你的目标只是显示一些网页作为用户界面的一部分,
这可能是好的;用户不需要与网页交互。如果你真的想要一个完全成熟的网络浏览器,那么你可能要调用的是浏览器应用程序,而不是一个webview显
示一个URL意图。例如:

 Uri uri = Uri.parse("http://www.example.com");
 Intent intent = new Intent(Intent.ACTION_VIEW, uri);
 startActivity(intent);
 

更多信息请阅读Intent 意图.。

要提供一个webview在自己的Activity中,包括在你的布局,WebView的窗口设置在Activity的 onCreate():方法中;

 WebView webview = new WebView(this);
 setContentView(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);
 // ... 但是请注意这对HTML有限制
 // 更多的信息请看loaddata()和loaddatawithbaseurl()的javadocs文档
 

一个webview有几个自定义点,在这里你可以添加你自己的行为。这些是:

  • 创建和设置WebChromeClient的子类,当浏览器的UI发生变化时调用,如:进度条更改、JavaScript的窗口。
    (见Debugging Taskshttp://developer.android.com/tools/debugging/index.html)
  • 创建和设置WebViewClient子类,当底层内容变化时调用,如:错误或表单提交。你也可以再次拦截URL调用。
    (通过shouldOverrideUrlLoading())
  • 修改WebSettings,例如:让JavaScript可用--setJavaScriptEnabled().
  • 增加JavaScript-to-Java接口addJavascriptInterface(Object,String)。
    可以将java对象绑定到WebView,这样对象可以被网页的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://slashdot.org/");
 


Cookie和窗口管理

为了安全起见,你的应用程序需要使用自己的缓存,它不共享浏览器应用程序的数据。默认情况下,通过HTML打开新窗口的请求被忽略。无论是通过JavaScript或链路上的目标属性打开,这是真的。你可以定制你的 WebChromeClient 提供你自己打开多个窗口的行为,这可以使你随意控制他们的任何方式。标准的行为是要销毁并重新创建一个活动时,更改设备的方向或任何其他配置。这将导致的WebView重新载入当前页面。如果你不希望出现这种情况,您可以将您的Activity屏幕方向和keyboardHidden的变化,然后单独退出WebView。它会自动重新适配自己。运行时如何处理配置更改请阅读更多信息,Handling Runtime Changes 。

制作支持不同的屏幕密度的网页

一个的移动设备的屏幕密度是根据在屏幕上的分辨率。低密度的屏幕每英寸的可用像素较少,一个高密度屏幕在每英寸像素效果显著更多 - 。一个屏
幕的密度是很重要的,因为,其他条件都相同,在UI元素(例如,一个按钮),其高度和宽度被定义在屏幕像素方面会出现较大的和较小的密度较低的
屏幕上的更高密度的屏幕上。为简单起见,Android折叠所有实际的屏幕密度为:高,中,低三个广义密度。

缺省情况下,web视图缩放一个网页,以便它被绘制在中等密度的屏幕上的尺寸相匹配的默认外观。因此,在高密度屏幕采用1.5倍缩放(因为它的像素较小)和0.75倍缩放一个低密度画面上(因为它的像素大)。开始的WebView支持API级 ECLAIR,DOM,CSS,和meta标签的功能,以帮助您作为一个web开发目标不同的屏幕密度的屏幕。这里有一个总结的功能,你可以用它来处理不同的屏幕密度:

  •  window.devicePixelRatio  DOM属性。此属性的值指定了默认的比例因子,用于当前设备。例如,如果window.devicePixelRatio值是“1.0”,则该设备被认为一个中等密度(MDPI)的移动设备和默认缩放系数不施加到在网页;如果该值是“1.5”,则该设备是认为是一个高密度的移动设备(HDPI)和页面内容进行缩放1.5倍,如果该值是“0.75”,则该设备被认为一个低密度的移动设备(LDPI)和内容缩放0.75倍。但是,如果您指定“目标densitydpi”元属性(下面讨论),那么你可以停止这个默认的缩放行为。
  •  -webkit-device-pixel-ratio CSS样式查询。使用指定的屏幕密度,该样式表是分别相应的值必须是“0.75”,“1”,或“1.5”,表示方式是低密度
    ,中密度或高密度的设备,屏幕,分别。比如说:example:
     <link rel="stylesheet" media="screen and (-webkit-device-pixel-ratio:1.5)" href="hdpi.css" />

    样式表仅用于设备的屏幕像素比为1.5,这是高密度的像素比例。

  • 对于viewport meta标签的target-densitydpi 属性. 你可以指定的Web页面的目标密度,使用以下值:默认缩放将永远不会发生:
    • device-dpi -使用设备的原始分辨率为目标的DPI默认缩放不会发生.
    • high-dpi -使用hdpi、低密度的屏幕缩小适当.
    • medium-dpi - 使用mdpi. 高密度屏幕的扩大和低密度屏幕缩小
    • low-dpi -使用ldpi. 中,高密度屏适当扩大.
    •  -指定要使用的DPI DPI值可接受的值是70-400.

    下面是一个meta标签指定目标密度的例子

    <meta name="viewport" content="target-densitydpi=device-dpi" />

如果你想修改网页密度, 就使用 -webkit-device-pixel-ratio  CSS3 Media Query   并/或  window.devicePixelRatio DOM 属性 然后你应该设置 target-densitydpi meta 属性为 device-dpi. 这将阻止Android的在你的网页进行缩放,并允许你为所有像素密度通过CSS和JavaScript做出必要的调整。

HTML5 视频 播放支持

为了支持内联HTML5视频在您的应用程序,你需要开启硬件加速和设置   WebChromeClient,

Summary


Nested Classes
interface WebView.FindListener 监听查找结果的接口 
class WebView.HitTestResult  
interface WebView.PictureListener 不推荐使用此接口在API级别12。该接口是现在已经过时。  
class WebView.WebViewTransport 返回的WebView跨线程边界传输对象
[Expand]

[Expand]
继承XML 属性
From class android.view.ViewGroup
From class android.view.View
常量
String SCHEME_GEO URI scheme for map address.
String SCHEME_MAILTO URI scheme for email address.
String SCHEME_TEL URI scheme for telephone number.
继承的常量
从阶级 android.view.ViewGroup
从类 android.view.View
[展开]
继承的字段
从类 android.view.View
公共构造函数
的WebView上下文上下文)
一个Context对象构造一个新的WebView。
的WebView上下文背景下 的AttributeSet ATTRS)
构造一个新的WebView与布局参数。
的WebView上下文背景下 的AttributeSet ATTRS,INT defStyle)
构造一个新的WebView与布局参数和默认样式。
的WebView上下文背景下 的AttributeSet ATTRS,INT defStyle,布尔privateBrowsing)
这个构造函数在API等级17是不推荐。私人浏览功能不再支持直接通过WebView,将在未来的版本中删除。不再私自访问 WebSettings,而改用WebViewDatabaseCookieManager 和WebStorage的进行隐私数据操作和细粒度的控制。

Public Methods
void addJavascriptInterface( Object object,  String name)
Java对象提供 Web视图
boolean canGoBack()
获取WebView一个回溯的历史事项
boolean canGoBackOrForward(int steps)
页面是否后退或前进,或 给定数目的后退或前进。
boolean canGoForward()
获取的WebView有一个向前的历史记录项。
boolean canZoomIn()
不推荐使用此方法  API level17。这种方法很容易出现不准确的网页渲染和UI线程之间的竞争条件;建议使用onScaleChanged(WebView, float, float).
boolean canZoomOut()
这种方法被废弃APIlevel17这种方法很容易由于种族的网页渲染UI线程之间;建议onScaleChanged(WebView, float, float).
Picture capturePicture()
捕捉当前WebView的图片
void clearCache(boolean includeDiskFiles)
清除资源缓存.
void clearFormData()
目前 的表单域自动 删除 弹出 如果存在的话
void clearHistory()
告诉 WebView 清除 其内部的 向后/向前 列表
void clearMatches()
清除由   findAllAsync(String) .创建 出的显示强调突出的文本。
void clearSslPreferences()
清除 存储 响应与 SSL 证书错误.
void clearView()
清除此 Web视图 如果 measurespec measurespec.exactly ondraw() 只有白色的 背景 onmeasure() 将返回0,
void computeScroll()
调用父类请求子类更新其 mScrollX 和mScrollY的值.
WebBackForwardList copyBackForwardList()
获取 Web视图的webbackforwardlist
void destroy()
销毁WebView的内部状态.
boolean dispatchKeyEvent( KeyEvent event)
调度下一个视图的焦点路径上的关键事件..
void documentHasImages( Message response)
查询文件,看它是否包含任何图片引用。
abstract void dumpViewHierarchyWithProperties( BufferedWriter out, int level)
Dumps custom children to hierarchy viewer.
static  String findAddress( String addr)
获取 一个物理 位置的地址 的第一个子串
int findAll( String find)
这种方法不推荐 API level 16.   首选findAllAsync(String) 
void findAllAsync( String find)
异步的查找网页上所有的实例
abstract  View findHierarchyView( String className, int hashCode)
Returns a View to enable grabbing screenshots from custom children returned in dumpViewHierarchyWithProperties.
void findNext(boolean forward)
滚动并加亮到下一个匹配的  findAllAsync(String), 直到网页边界
void flingScroll(int vx, int vy)
void freeMemory()
通知当前的WebView内存是低的,以便它可以释放任何可用的内存
SslCertificate getCertificate()
获取 主要顶层页的SSL证书,或者null,如果没有证书(该网站是不安全的)。
int getContentHeight()
获取的HTML内容的高度。
Bitmap getFavicon()
获取当前 页的 图标
WebView.HitTestResult getHitTestResult()
Gets a HitTestResult based on the current cursor node.
String[] getHttpAuthUsernamePassword( String host,  String realm)
对于一个给定的主机和域检索HTTP身份验证凭据.
String getOriginalUrl()
获取当前页面的原始URL..
int getProgress()
获取当前页面的进度.
float getScale()
不推荐使用此方法在API等级17。此方法很容易造成不准确的网页渲染和UI线程之间的竞争。建议onScaleChanged(WebView, float, float).
WebSettings getSettings()
获取WebSettings的对象,用于控制设置此WebView.
String getTitle()
获取当前页面的标题.
String getUrl()
获取当前页面的URL.
void goBack()
返回 这个 Web视图 的历史记录.
void goBackOrForward(int steps)
从当前的步骤数跳转到历史记录的指定步骤数。.
void goForward()
WebView 的历史记录前进
void invokeZoomPicker()
当前 WebView调用图形变焦选择器.
boolean isPrivateBrowsingEnabled()
获取 此WebView 私人浏览是否已启用 .
void loadData( String data,  String mimeType,  String encoding)
这个WebView加载 由 “data”   给定的数据 构建成的URL
void loadDataWithBaseURL( String baseUrl,  String data,  String mimeType,  String encoding,  String historyUrl)
Loads the given data into this WebView, using baseUrl as the base URL for the content.
void loadUrl( String url)
加载此URL.
void loadUrl( String url,  Map< StringString> additionalHttpHeaders)
加载给定的URL指定额外的HTTP标头.
void onChildViewAdded( View parent,  View child)
这种方法被废弃在API level8WebView不再需要viewgroup.onhierarchychangelistener这种方法 现在 不会实现
void onChildViewRemoved( View p,  View child)
这种方法被废弃在API level8WebView不再需要viewgroup.onhierarchychangelistener这种方法现在不会实现
InputConnection onCreateInputConnection( EditorInfo outAttrs)
创建一个新的InputConnection InputMethod与视图交互
boolean onGenericMotionEvent( MotionEvent event)
实现这个方法来处理通用的手势事件
void onGlobalFocusChanged( View oldFocus,  View newFocus)
不推荐使用此方法  API level3。不应该执行WebView ViewTreeObserver.OnGlobalFocusChangeListener。这种方法现在什么也不做。
boolean onHoverEvent( MotionEvent event)
实现这个方法来处理悬停事件.
void onInitializeAccessibilityEvent( AccessibilityEvent event)
初始化  AccessibilityEvent  事件 源信息.
void onInitializeAccessibilityNodeInfo( AccessibilityNodeInfo info)
初始化AccessibilityNodeInfo 关于视图的信息.
boolean onKeyDown(int keyCode,  KeyEvent event)
默认实现  KeyEvent.Callback.onKeyDown(): 如果视图是有效并且可点击,执行按下视图直到  KEYCODE_DPAD_CENTER or KEYCODE_ENTER 释放, 
boolean onKeyMultiple(int keyCode, int repeatCount,  KeyEvent event)
默认实现  KeyEvent.Callback.onKeyMultiple(): 总是返回false (不处理这个事件).
boolean onKeyUp(int keyCode,  KeyEvent event)
默认  KeyEvent.Callback.onKeyUp(): 执行点击直到  KEYCODE_DPAD_CENTER or KEYCODE_ENTER 释放.
void onPause()
暂停 WebView和其相关联的DOM,插件,JavaScript 等 任何额外的处理
void onResume()
恢复webview在onPause()前后.
boolean onTouchEvent( MotionEvent event)
实现这个方法处理手势事件。.
boolean onTrackballEvent( MotionEvent event)
实现这个方法处理轨迹球运动事件.
void onWindowFocusChanged(boolean hasWindowFocus)
当窗口被扣调用或者失去焦点.
boolean overlayHorizontalScrollbar()
获取水平滚动条是否有叠加样式
boolean overlayVerticalScrollbar()
Gets whether vertical scrollbar has overlay style.
boolean pageDown(boolean bottom)
滚动 WebView 页面 大小 一半 内容
boolean pageUp(boolean top)
向上滚动 WebView 页面 大小 一半 内容
void pauseTimers()
暂停webview 所有布局,解析,javaScript times计时器
boolean performAccessibilityAction(int action,  Bundle arguments)
在视图上执行指定的动作
boolean performLongClick()
如果被定义将调用调用view的OnLongClickListener
void postUrl( String url, byte[] postData)
webview使用"Post"方法 加载URL  ,附带 postData  数据。
void reload()
重新载入当前 URL.
void removeJavascriptInterface( String name)
从这个web视图中移除先前注入的Java对象.
boolean requestChildRectangleOnScreen( View child,  Rect rect, boolean immediate)
一组子类需要将一个特殊的矩形定为到屏幕上.
boolean requestFocus(int direction,  Rect previouslyFocusedRect)
调用该函数来尝试给予指定的视图或者其子类焦点和方向和特定矩形. 直到符合要求 by getDescendantFocusability().
void requestFocusNodeHref( Message hrefMsg)
请求 最后 图像元素 的URL
void requestImageRef( Message msg)
最后一个接触的用户请求的URL的图像
WebBackForwardList restoreState( Bundle inState)
这从给定的Bundle对象恢复WebView的状态,
void resumeTimers()
恢复 WebViews所有的布局,解析和JavaScript计时器
void savePassword( String host,  String username,  String password)
设置 为指定的 主机的 用户名和密码.
WebBackForwardList saveState( Bundle outState)
保存此 Web视图 使用的状态  onSaveInstanceState(Bundle).
void saveWebArchive( String filename)
保存当前 视图作为 Web存档.
void saveWebArchive( String basename, boolean autoname,  ValueCallback< String> callback)
保存当前 视图作为 Web存档
void setBackgroundColor(int color)
设置视图的背景颜色
void setCertificate( SslCertificate certificate)
这种方法被废弃APIlevel17调用这个函数没有有用的效果将在以后的版本中被忽略.
void setDownloadListener( DownloadListener listener)
当内容不能被渲染引擎处理和不应该下载时注册一个接口来使用
void setFindListener( WebView.FindListener listener)
在网页上查找 操作 进展 通知 注册监听器
void setHorizontalScrollbarOverlay(boolean overlay)
指定水平滚动条是否有叠加样式
void setHttpAuthUsernamePassword( String host,  String realm,  String username,  String password)
为一个给定的主机和领域 存储 HTTP 身份验证凭据
void setInitialScale(int scaleInPercent)
设置 WebView 初始比例
void setLayerType(int layerType,  Paint paint)

为视图的层指定类别.

void setLayoutParams( ViewGroup.LayoutParams params)
设置 此视图关联的 布局参数
void setMapTrackballToArrowKeys(boolean setMap)
默认的情况下 不推荐使用此方法    API level17。,实际将在未来的版本中支持.
void setNetworkAvailable(boolean networkUp)
通知WebView的网络状态
void setOverScrollMode(int mode)
设置 该视图的 滚动模式
void setPictureListener( WebView.PictureListener listener)
不推荐使用此方法 API level12。这个方法现在已经过时。.
void setScrollBarStyle(int style)

指定滚动条的样式.

void setVerticalScrollbarOverlay(boolean overlay)
指定 垂直滚动条 是否 叠加样式 .
void setWebChromeClient( WebChromeClient client)
设置脚本处理.
void setWebViewClient( WebViewClient client)
设置WebViewClient会接收到各种通知和请求
boolean shouldDelayChildPressedState()
如果是 按下的状态 应推迟到子类 或其子类下 返回true
boolean showFindDialog( String text, boolean showIme)
在这个 页面 开始 查找文本
void stopLoading()
停止当前的加载.
boolean zoomIn()
执行放大该webView
boolean zoomOut()
执行缩小该webview
Protected Methods
int computeHorizontalScrollOffset()

计算的水平滚动条上的滑块水平范围的水平偏移量

int computeHorizontalScrollRange()

计算水平滚动条的水平距离

int computeVerticalScrollExtent()

计算的水平滚动条上的滑块垂直范围内的垂直距离

int computeVerticalScrollOffset()

计算的垂直滚动条上的滑块水平范围的垂直偏移

int computeVerticalScrollRange()

计算的垂直滚动条垂直距离.

void onAttachedToWindow()
当这个视图连接一个窗口则调用.
void onConfigurationChanged( Configuration newConfig)
目前正在使用的应用程序的资源配置改变时调用
void onDetachedFromWindow()
当这个视图脱离一个窗口则调用.
void onDraw( Canvas canvas)
实现绘制
void onFocusChanged(boolean focused, int direction,  Rect previouslyFocusedRect)
系统的 一个视图的焦点状态改变 调用
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

测量视图和它的内容来确定测量宽度和测量高度.

void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY)
调用  overScrollBy(int, int, int, int, int, int, int, int, boolean)  回应 滚动 操作的结果
void onScrollChanged(int l, int t, int oldl, int oldt)
当此视图内部内容滚动时回调此响应 
void onSizeChanged(int w, int h, int ow, int oh)
当视图的大小改变期间回调
void onVisibilityChanged( View changedView, int visibility)
当视图可见状态或视图的父类可见状态改变.
void onWindowVisibilityChanged(int visibility)
当窗口所包含的可见状态改变回调 (between  GONEINVISIBLE, and  VISIBLE).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值