一些设置
//获取WebSettings对象
WebSettings settings = wv_web.getSettings();
//设置缩放按钮
settings.setBuiltInZoomControls(true);
//双击缩放
settings.setUseWideViewPort(true);
改变字体大小
// 改变webview字体大小
protected void changeTextSize ( int currentIndex){
switch (currentIndex) {
case 0:
// 改变webview字体
settings.setTextSize(TextSize.LARGEST);
break;
case 1:
settings.setTextSize(TextSize.LARGER);
break;
case 2:
settings.setTextSize(TextSize.NORMAL);
break;
case 3:
settings.setTextSize(TextSize.SMALLER);
break;
case 4:
settings.setTextSize(TextSize.SMALLEST);
break;
default:
break;
}
}
加载网页
wv_web.loadUrl(url);
加载完成监听
//监听WebView加载完成
wv_web.setWebViewClient(new WebViewClient() {
//页面加载完成调用—重写onPageFinished
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
pb_progress.setVisibility(View.GONE);
}
});
JavaScript调用java代码
html写法
button调用了一个方法windows.android.back()
Paste_Image.png
1支持JavaScript
// 支持Javascript—在loadUrl之前
settings.setJavaScriptEnabled(true);
2对象的方法想被JavaScript调用,必须加注解
@JavascriptInterface--方法名与调用的方法名一致
class JavaObject {
//加注解
// sdk 4.2 以上要求被JavaScript调用的方法,必须加@JavascriptInterface(考虑到安全)
@JavascriptInterface
// 方法与其调用的方法名一致
public void back() {
//把自己关闭掉
finish();
}
}
3给JavaScript传递java对象
// 给JavaScript传递java对象
// 参数1 传递的对象 ,参数2 对象名字,在JavaScript中可以使用 window.参2
wv_web.addJavascriptInterface(new JavaObject(), "Android");
// 任何HTML中都有window这个对象,
4在html文档中调用java代码
window.Android.back()
Java中调用JavaScript代码
HTML文档的写法
Paste_Image.png
1支持JavaScript
// 支持Javascript—在loadUrl之前
settings.setJavaScriptEnabled(true);
调用Javascript代码
//WebView默认不支持alert弹框--需要设置
wv_web.setWebChromeClient(new WebChromeClient());
//调用JavaScript代码
wv_web.loadUrl("javascript:wave()");
//javascript:方法名
设置点击链接
处理源码里的连接
webView.setWebViewClient(getWebViewClient());//设置client
//复写方法
public WebViewClient getWebViewClient () {
return new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
showUrlRedirect(view.getContext(), url);
return true;// 自己处理html里面link
}
};
}
public void showUrlRedirect (Context context, String url){
Toast.makeText(context, url, Toast.LENGTH_SHORT).show();
}
组拼HTML
不变的源码直接考到本地
Paste_Image.png
获取文档—解析xml
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = new String(response.body().string());
final NewsDetail newsDetail = XmlUtils.toBean(NewsDetail.class, result.getBytes());
// 解析网络返回的数据,把要展示的内容拼接
NewsDetailActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
fillWebViewBody(newsDetail.getNews());
}
});
}
Html-字符串拼接Body—添加stringbuffer
private void fillWebViewBody(News mNews) {
mTvTitle.setText(mNews.getTitle());
mTvSource.setText(mNews.getAuthor());
mTvTime.setText(StringUtils.friendly_time(mNews.getPubDate()));
StringBuffer body = new StringBuffer();
body.append(UIHelper.setHtmlCotentSupportImagePreview(mNews.getBody()));
body.append(UIHelper.WEB_STYLE).append(UIHelper.WEB_LOAD_IMAGES);
// 更多关于***软件的信息
String softwareName = mNews.getSoftwareName();
String softwareLink = mNews.getSoftwareLink();
if (!StringUtils.isEmpty(softwareName)
&& !StringUtils.isEmpty(softwareLink))
body.append(String
.format("<div id='oschina_software' style='margin-top:8px;color:#FF0000;font-weight:bold'>更多关于: <a href='%s'>%s</a> 的详细信息</div>",
softwareLink, softwareName));
// 相关新闻
if (mNews != null && mNews.getRelatives() != null
&& mNews.getRelatives().size() > 0) {
String strRelative = "";
for (News.Relative relative : mNews.getRelatives()) {
strRelative += String.format(
"<a href='%s' style='text-decoration:none'>%s</a><p/>",
relative.url, relative.title);
}
body.append("<p/><div style=\"height:1px;width:100%;background:#DADADA;margin-bottom:10px;\"/>"
+ String.format("<br/> <b>相关资讯</b> <div><p/>%s</div>",
strRelative));
}
body.append("<br/>");
try {
File file = new File(Environment.getExternalStorageDirectory(),
String.format("/OSChina/html/%d.html", mNews.getId()));
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(body.toString().getBytes());
fos.close();
System.out.println(body);
System.out.println("save success! :" + file.getPath());
} catch (Exception e) {
e.printStackTrace();
}
}
Webview显示成html—支持拼接源码
if (webView != null) {
// webview 加载字符串(拼接后的字符串) 显示html
webView.loadDataWithBaseURL(null, body.toString(), "text/html",
"utf-8", null);
// webView.loadDataWithBaseURL(null, mNews.getBody(), "text/html",
// "utf-8", null);
// webView.loadUrl("http://10.0.2.2:8080/oschina/detail/news_detail/64311.xml");
}