android创建webview,Android Webview总结

这些都是曾经收集到的一些关于Webview的知识,有些工作中用到了,有些暂时还没有用到,这次统一整理下,希望对自己,对大家有所帮助。另外,欢迎大家补充(当然,有错也要指正呀,不胜感激),如果可以的话,我会 更新到本帖中。

一.权限

二.创建Webview对象

WebView webview = new WebView(this);

三.加载网页的方式

loadData(String data, String mimeType, String encoding)

des:Load the given data into the WebView.

as:

String summary = "

You scored 192 points.";

webview.loadData(summary, "text/html", null);

loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

des:Load the given data into the WebView, use the provided URL as the base URL for the content.

loadUrl(String url)

des:Load the given url.

as: webView.loadUrl("http://www.jianshu.com/"); //加载网络网页

webView.loadUrl("file:///android_asset/html/index.html"); //加载本地assert目录下网页

webView.loadUrl("content://com.Android.htmlfileprovider/sdcard/kris.html"); // 加载SD卡html

loadUrl(String url, Map extraHeaders)

Load the given url with the extra headers.

postUrl(String url, byte[] postData)

des: Loads the URL with postData using "POST" method into this WebView.

利用Intent调用系统浏览器

Uri uri = Uri.parse("http://www.jianshu.com/");

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

startActivity(intent);

四.设置Webview

webView.clearHistory();

webView.clearCache(true);

webView.clearFormData();

webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);// 隐藏滚动条webView.requestFocus();

webView.requestFocusFromTouch();

五.Webview辅助类

1>WebSettings

设置WebView的一些属性、状态等,例如允许使用javascript,允许使用缓存,允许使用内置的缩放组件,设置支持IS等。

获取WebSettings对象:

WebSettings mWebSettings = webView.getSettings();

For Example

WebSettings mWebSettings = webView.getSettings();

mWebSettings.setJavaScriptEnabled(true);// 支持JS

mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口

mWebSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);//提高渲染等级

mWebSettings.setBuiltInZoomControls(false);// 设置支持缩放

mWebSettings.setDomStorageEnabled(true);//使用localStorage则必须打开

mWebSettings.setBlockNetworkImage(true);// 首先阻塞图片,让图片不显示

mWebSettings.setBlockNetworkImage(false);// 页面加载好以后,在放开图片:

mWebSettings.setSupportMultipleWindows(false);// 设置同一个界面

mWebSettings.setBlockNetworkImage(false);

mWebSettings.setCacheMode(1);

mWebSettings.setNeedInitialFocus(false);// 禁止webview上面控件获取焦点(黄色边框)

2>WebViewClient

主要帮助WebView处理各种通知、请求事件(例如,点击链接时候如何显示界面,页面开始加载,加载完毕之后有何动作等)

webView.setWebViewClient(new WebViewClient() {

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

//页面开始加载时

super.onPageStarted(view, url, favicon);

}

@Override

public void onPageFinished(WebView view, String url) {

//页面加载结束时

super.onPageFinished(view, url);

}

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

// 这里进行无网络或错误处理,具体可以根据errorCode的值进行判断,

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

/**

* 网页跳转:

* 1.在当前的webview跳转到新连接

* view.loadUrl(url);

* 2.调用系统浏览器跳转到新网页

* Intent i = new Intent(Intent.ACTION_VIEW);

* i.setData(Uri.parse(url));

* startActivity(i);

*/

return true;

}

});

3>WebChromeClient

辅助WebView处理Javascript的对话框、网站图标、网站Title、加载进度等

webView.setWebChromeClient(new WebChromeClient() {

@Override

public void onProgressChanged(WebView view, int newProgress) {

// 获得网页的加载进度 newProgress为当前加载百分比

super.onProgressChanged(view, newProgress);

}

@Override

public void onReceivedTitle(WebView view, String title) {

// 获取网页的title,客户端可以在这里动态修改页面的title

// 另外,当加载错误时title为“找不到该网页”

super.onReceivedTitle(view, title);

}

});

六.与JS交互addJavascriptInterface

前提

mWebView.getSettings().setJavaScriptEnabled(true);

使用

mWebView.addJavascriptInterface(new JSInterface(), "jsInterface");

JSInterface对象:

public class JSInterface {

@JavascriptInterface

public void methodA() { }

@JavascriptInterface

public void methodB(String webMessage) { }

}

注意:

1.JavascriptInterface是4.2版本google新增的一个注解,为了避免一个安全隐患,详细信息及4.2以下系统版本适配看这里:Android WebView的Js对象注入漏洞解决方案;另外,safe-java-js-webview-bridge这个开源项目完全用onJsPrompt() 替代了addJavaScriptInterface(),有兴趣的可以学习。

2.JS调用Java:

window.js_callback.viewPicOnJavascript($('article img').index(this));

3.客户端调用JS

mWebView.loadUrl("javascript:alert()");

七.键盘

webview是否可以返回到上一页面 webView.canGoBack()

webview返回到上一页面 webView.goBack();

webview是否可以前进 webView.canGoForward()

webview前进 webView.goForward();

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

mWebView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

八.其他

WebViewFragment

好吧,之前确实不知道有这么个东东,今天写这篇贴子的时候才发现的,看名字,应该是在Fragment里对Webview的封装,应该是个好东西。有兴趣的小伙伴们 点进来:WebViewFragment

WebView cookies清理

CookieSyncManager.createInstance(this);

CookieSyncManager.getInstance().startSync();

CookieManager.getInstance().removeSessionCookie();

屏蔽长按事件

webView.setOnLongClickListener(new View.OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

return true;

}

});

Webiew保留缩放功能但是隐藏缩放控件(这是一招必杀技)

webView.getSettings().setSupportZoom(true);

webView.getSettings().setBuiltInZoomControls(true);

webView.getSettings().setDisplayZoomControls(false);

// setDisplayZoomControls是在Android 3.0中新增的API.,调用此方法前需要对系统版本进行判断

判断Webview是否滑动到顶部或底部

if (webView.getContentHeight() * webView.getScale() == (webView.getHeight() + webView.getScrollY())) {

// 处于底端

}

if(webView.getScrollY() == 0){

//处于顶部

}

des:

getScrollY() //方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.

getHeight()或者getBottom() //方法都返回当前WebView这个容器的高度

getContentHeight()返回的是整个html的高度,但并不等同于当前整个页面的高度,因为WebView有缩放功能,所以当前整个页面的高度实际上应该是原始html的高度再乘上缩放比例

Thank you and have a nice weekend!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值