Android WebApp开发之WebVIew介绍

一个显示网页的视图。这个类是在Activity中显示在线内容或滚动自定义的浏览器的基础。它使用WebKit渲染引擎来显示网页还包括浏览历史向前和向后导航、放大和缩小、执行文本搜索等方法。

需要注意的是:为了使Activity能够访问网络并在WebView中加载网页,需要在AndroidManifest文件中添加INTERENT权限。

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

基本用法

使用URL意图调用浏览器应用程序:

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

给Activity提供一个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有几个自定义点,可以在其中添加自己的行为:

  • 创建并设置一个 WebChromeClient的子类。影响浏览器的用户界面。
  • 创建并设置一个WebViewClient的子类。影响渲染的内容。
  • 修改WebView的设置WebSettings。
  • 注入Java对象到WebView使用addJavascriptInterface(Object, String)方法。

如下:显示错误处理,设置,进度提醒

 // 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/");

变焦

启用内置变焦,WebSettings.setBuiltInZoomControls(boolean)。
注意:如果webview的宽或高设置为WRAP_CONTENT,使用变焦可能导致未定义的行为,应该避免。

Cookie和window管理

由于明显的安全原因,应用程序有自己的缓存、Cookie存储等——它不共享浏览器应用程序的数据。默认情况下,忽略HTML打开新窗口的请求。您可以自定义 WebChromeClient,以提供自己的行为来打开多个窗口,并以任何方式呈现它们。当设备方向或任何其他配置改变时,Activity的标准行为将被销毁和重建。这会导致WebView重新加载当前页面。如果你不希望这样,你可以设置Activity来处理orientation和keyboardHidden的改变。

构建支持不同屏幕密度的网页

设备的屏幕密度是基于屏幕分辨率的。低密度的屏幕每英寸可用像素少,其中高密度的屏幕每英寸有更多(有时显著更多)的像素。屏幕的密度很重要,因为根据屏幕像素定义的高度和宽度的UI元素(例如按钮)将在较低密度屏幕上显示较大,在较高密度屏幕上显示较小。为简单起见,Android将所有实际屏幕密度分成三个广义密度:高、中、低。默认情况下,WeView缩放网页使其绘制一个匹配中等密度屏幕的默认外观的大小。因此,它在高密度屏幕上应用1.5倍缩放(因为它的像素更小)和在低密度屏幕上的0.75倍缩放(因为它的像素更大)。从API level 5开始,WebView支持DOM、CSS和Meta标签功能,以帮助您(作为Web开发人员)以不同屏幕密度为目标屏幕。

下面是可以用来处理不同屏幕密度的特征的总结:

  • window.devicepixelratio DOM的属性。此属性的值指定当前设备使用的默认缩放因子。
  • -webkit-device-pixel-ratio CSS的媒体查询。使用此来指定要使用该样式表的屏幕密度。例如:< link rel=”stylesheet” media=”screen and (-webkit-device-pixel-ratio:1.5)” href=”hdpi.css” />
HTML5 视频支持

为了支持应用程序中内嵌HTML5视频,需要打开硬件加速。

全屏支持

为了支持全屏(视频或HTML内容),需要设置WebChromeClient并实现onShowCustomView(View, WebChromeClient.CustomViewCallback) 和onHideCustomView()。如果缺少这两种方法中的任何一种,那么Web内容将不允许进入全屏。可以通过实现getVideoLoadingProgressView()来自定义视频加载时显示的视图。
实现请见:WebView全屏播放视频

HTML5定位支持

针对Android N和以后版本的应用程序(API level > M),地理定位API仅支持安全的来源,如HTTPS。对非安全源的地理定位API的请求应用程序会自动拒绝,而不会调用相应的onGeolocationPermissionsShowPrompt(String, GeolocationPermissions.Callback)方法。

布局尺寸

建议将WebView的大小设成固定值或者使用MATCH_PARENT代替WRAP_CONTENT。当高度使用MATCH_PARENT时,WebView的父容器都不应该使用WRAP_CONTENT内容布局高度,因为这可能导致视图的大小不正确。


常用方法

//将提供的Java对象注入到WebView,用于JS与Android交互
addJavascriptInterface(Object object, String name)

//获取此WebView是否具有历史记录项
canGoBack()

//获取页面是否可以返回或前进给定数量的步骤。
canGoBackOrForward(int steps)

//获取此WebView是否具有前向历史项
canGoForward()

//清除资源缓存
clearCache(boolean includeDiskFiles)

//告知此WebView以清除浏览历史
clearHistory()

//销毁WebView的内部状态
destroy()

//在当前显示页面的上下文中异步评估Javascript(不太明白评估的具体含义),由于调用JS方法且可获取返回值。
evaluateJavascript(String script, ValueCallback resultCallback)

//获取HTML内容的高度
getContentHeight()

//获取当前页面的原始URL
* getOriginalUrl()*

//获取当前页的进度
getProgress()

//获取用于控制此WebView的设置的WebSettings对象
getSettings()

//获取当前页面的标题
getTitle()

//获取当前页面的url
getUrl()

//回退
goBack()

//前进
goForward()

//将给定的数据加载到WebView中
loadData(String data, String mimeType, String encoding)

//将给定的数据加载到WebView中,使用BaseURL作为内容的基本URL
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

//加载url
loadUrl(String url)

//重新加载当前连接
reload()

//移除webview中注入的Java对象
removeJavascriptInterface(String name)

//设置背景颜色
setBackgroundColor(int color)

//设置Chrome处理者
setWebChromeClient(WebChromeClient client)

//设置将接收各种通知和请求的WebViewClient
setWebViewClient(WebViewClient client)

//停止当前加载
stopLoading()

//放大
zoomIn()

//缩小
zoomOut()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值