webview 使用
1.为了使用与加载,必须使用网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.加载方式
1)动态加载
ex:
WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("http://slashdot.org/");
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
2)通过加载xml/html5
ex:
webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_asset/index.html");
3.webview的定制点
1)创建于设置webChromeClient子类,该类调用可能会影响浏览器用户界面发生的东西,例如,进度更新和javaSript警报发送在这里。
2)创建和设置webviewClient子类,它被称为当事情发送,影响内容的呈现,例如错误与表单的提交。你也可以在这里拦截URL加载(通过shouldOverrideUrloading())
3)修改websetting 比如启用javaScript setJavaScriptEnabled()。
4)向webview使用addJvaScriptInterface注入java对象(对象,字符串)方法。这个方法允许将java对象注入到一个页面的javaScript上下文,这样他们可以通过javascript访问的页面。
ex:
//显示进度与显示错误
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();
}
});
重点:WebChromeClient使用
getDefaultVideoPoster()
当video不playing时候,默认调用一张海报来显示
获得当前Video的进度
getVideoLoadingProgressView()
当前加载页面进度改变
onProgressChanged(WebView view, int newProgress)
4.设置setting管理
1)要启用内置变焦
webSettings.setBuiltlnZoomControls(boolen b)
内置的放大机制包括屏幕缩放控件,WebView的显示内容,使用缩放手势控制缩放。这些屏幕上的控件是否显示可以设置与setDisplayZoomControls(布尔)。默认的是false。
注意:使用变焦,如果高度或宽度设置为WRAP_CONTENT可能导致未定义行为,应该避免。
2)启用或禁止webView的Ulr访问
setAllowContentAccess()
注意:内容的URL访问允许webView加载内容从系统安装一个内容提供者,默认启用
3)启用或禁止文件访问
setAllowFileAccess()
默认情况下为启用,注意,这个启用和禁止文件系统访问,资源仍未可使用文件//assrt res
4)JavaScript文件的上下文中运行方案是否应该允许URL访问其他文件方案的内容的URL。
使最严格,因此安全政策,应禁用此设置。注意,该设置将被忽略的价值如果getAllowUniversalAccessFromFileURLs()是正确的。注意,此设置只影响JavaScript访问文件计划资源。其他访问这些资源,例如,从图像的HTML元素,不受影响。为了防止可能违反ICE_CREAM_SANDWICH和早期设备上相同的域策略
setAllowUniversalAccessFromFileURLs//参考
5)是否使用应用程序的缓存api集
默认为false
SetAppCacheEnabled:
注意,为了使应用程序缓存API启用,一个有效的数据库路径也必须提供给setAppCachePath(字符串)。
setAppCachePath :
设置应用程序缓存文件的路径。为了让应用程序缓存API启用,调用这个方法必须使用一个路径,可以编写的应用程序。这种方法应该只被调用为一次:重复调用将被忽略。
setAppCacheMaxSize
设置应用程序缓存内容的最大大小。传递的大小将被四舍五入为最接近的值,数据库可以支持,这应被视为一个指南,不是硬限制。设置大小值小于当前数据库大小不会引起数据库修剪。默认大小是MAX_VALUE。建议把最大大小设置为默认值。
6)是否使用内置的放大机制
setBuiltInZoomControls
内置的放大机制包括屏幕缩放控件,WebView的显示内容,使用缩放手势控制缩放。这些屏幕上的控件是否显示可以设置与setDisplayZoomControls(布尔)。默认的是假的。 内置的机制是目前唯一支持放大机制,因此建议此设置总是启用。
setDisplayZoomControls
设置是否显示屏幕缩放控件
setDefaultZoom
设置默认放大
setSupportZoom
否应该支持使用其屏幕缩放控件和手势缩放。应该使用特定的放大机制,可以设置与setBuiltInZoomControls(布尔)。这个设置不会影响放大执行使用zoomIn()和zoomOut()方法。默认是正确的
supportZoom
WebView是否支持缩放。
7.覆盖的方式使用缓存
setCacheMode
覆盖的方式使用缓存。使用缓存的方式是基于导航类型。对于一个正常的页面加载,根据需要缓存的情况下将检查和内容。当导航,内容不是重新检验它,而不是只是从缓存检索的内容。这种方法允许客户端通过指定LOAD_DEFAULT之一,覆盖这一行为LOAD_CACHE_ELSE_NETWORK,LOAD_NO_CACHE或LOAD_CACHE_ONLY。默认值是LOAD_DEFAULT。
8.字体
setCursiveFontFamily
设置自定义字体名称。默认值是“cursive”。
setDefaultFixedFontSize //fixed固定的
setDefaultFontSize
默认字体大小
setDefaultTextEncodingName
设置html默认编码
setFantasyFontFamily
设置一个虚有的字体类型
setMinimumFontSize
设置最小字体大小
setSerifFontFamily
设置sans-serif类型字体
setStandardFontFamily
设置标准字体的名字
setTextSize
设置文本字体的大小
setTextZoom
设置文本页面的缩放比例。默认值是100。
9.设置是否使用数据库储存
setDatabaseEnabled
设置是否启用数据库存储API。默认值是错误的。参见setDatabasePath(字符串)如何正确设置数据库存储API。这个设置是全球性的,在所有WebView实例的过程。注意你应该只修改这个设置之前做任何WebView页面加载在一个给定的过程,随着WebView实现可能忽视这一点后更改此设置。
setDatabasePath
数据库储存路径
10.根据菜单项标志禁用操作模式菜单项。
setDisabledActionModeMenuItems
11.设置是否启用了DOM 储存 API。默认值是错误的。
setDomStorageEnabled
12.是否会实现平稳过渡而平移或缩放或同时承载WebView没有焦点的窗口。
setEnableSmoothTransition
如果这是真的,WebView将选择一个解决方案来最大化性能。例如WebView的内容可能不是在过渡更新。如果它是假的,WebView将保持其忠诚。默认值是错误的。
13.设置路径保存地理定位数据库
setGeolocationDatabasePath
为了定位权限和缓存位置被持久化,调用这个方法必须使用一个路径,可以编写的应用程序。
setGeolocationEnabled
是否启用地理定位
14.告诉JavaScript来自动打开的窗口。
setJavaScriptCanOpenWindowsAutomatically
这适用于JavaScript函数window.open()。默认的是假的。
setJavaScriptEnabled
是否允许使用js
15.是否加载页概述模式
setLoadWithOverviewMode
也就是说,镜头拉出宽度适合在屏幕上的内容。这个设置时考虑内容的宽度大于WebView控件的宽度,例如,当getUseWideViewPort()启用。默认的是假的
16.是否需要用户手势播放媒体。默认是正确的。
setMediaPlaybackRequiresUserGesture
17.集合的最小逻辑字体大小。默认是8。
setMinimumLogicalFontSize
18.设置渲染线程的优先级。
setRenderPriority
与其他的设置,这个只需要每个进程被调用为一次。默认值是正常的。
19.设置是否保存表单数据
setSaveFormData
默为true;
setSavePassword
保存密码
20.是否支持多个窗口。
setSupportMultipleWindows
如果设置为真,onCreateWindow(WebView、布尔、布尔值、消息)必须由主机应用程序实现。默认的是假的。
supportMultipleWindows
WebView是否支持多个窗口。
5.设置Cookie缓存与window管理
由于浏览器与应用软件的cookie不共享,所以应用程序应该有自己的缓存
6.webview的方法
1)注入js接口,可以通过js调用移动的方法
addJavascriptInterface(Object object, String name)
removeJavascriptInterface(String name)
2)返回键的调用
canGoBack() 得到这个WebView是否有回来的历史项目。
canGoBackOrForward(int) 页面是否可以给定数量的步骤上向前或向后移动。
canGoForward() 得到这个WebView是否有向前的历史项目。
clearHistory() 清除列表清单
copyBackForwardList() 复制back清单列表
goBack() //回到缓存列表
goBackOrForward(int steps)
goForward()
3)清除缓存资源
clearCache(boolean includeDiskFiles)
4)获取当前页面的进度
getProgress()
5)获取当前页面的url
getUrl()
6)将给定数据加载到这个URL WebView使用“数据”方案。
将给定数据加载到这个URL WebView使用“数据”方案。
loadData(String data, String mimeType, String encoding)
将给定数据加载到这个WebView,使用baseUrl作为基本URL的内容。
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
7)回复一个webview后调用方法
onResume()
8)保存当前状态
saveState(Bundle outState)
9)注册接口时使用的渲染引擎,不能处理的内容,应该下载。
setDownloadListener(DownloadListener listener)
10)使调试web内容(HTML / CSS / JavaScript)加载到该应用程序的任何webview。
setWebContentsDebuggingEnabled(boolean enabled)
11)停止当前加载
stopLoading()
1.webView 使用定位功能:
1)权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
2.属性设置
webSettings =webView.getSettings();// 网页设置默认属性
webView.setInitialScale(39);// 适应竖屏
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);// 去掉底部和右边的滚动条
// webSettings.setRenderPriority(RenderPriority.HIGH);// 提高渲染优先级
webSettings.setJavaScriptEnabled(true);// 设置是否可以交互Javascript
webSettings.setAllowFileAccess(true);// 启用或禁止WebView访问文件数据
webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);// 设置显示模式
webSettings.setDefaultZoom(ZoomDensity.MEDIUM);// 适应屏幕
// webView.getSettings().setUseWideViewPort(true);// 是否任意比例缩放
webView.getSettings().setLoadWithOverviewMode(true);// 缩放至屏幕的大小
// webView.getSettings().setUseWideViewPort(true);// 是否任意比例缩放
webSettings.setBuiltInZoomControls(false);// 设置是否支持缩放
// webSettings.setSupportZoom(false);// 设置是否支持变焦,仅支持双击缩放
webSettings.setNeedInitialFocus(false);// 设置是否可以访问文件
// webSettings.setBlockNetworkImage(true);// 加载图片放在最后加载渲染
// webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//
// 设置缓存模式
webSettings.setCacheMode(webSettings.LOAD_NO_CACHE);// 不使用缓存
// 这里的名称就是在页面window.fxl.testFunction()所取的别名
//js调用移动端方法
webView.addJavascriptInterface(new Scan2(),"mMap");
//关键setGeolocationEnabled
webView.getSettings().setGeolocationEnabled(true);//开启定位
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin,
android.webkit.GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
网友评论