最近项目用到webview显示后台返回的富文本编辑器生成的html代码.
网上给出的方法基本如下:
WebSettings settings = webView.getSettings();
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
这些方法都试过了不管用。
网上百度说是在Android 4.4. 版本之后不再支持这些设置,所以只能自己重新研究:
首先看下例子:
<p>\r\n\t<img src="http:\/\/oss-cn-qingdao.aliyuncs.com\/tiefenapp-oss\/Uploads\/file\/26\/image\/2016-05-24\/5744701c9dec3.JPG" alt="" \/>\r\n<\/p>\r\n<p>\r\n\t<p>\r\n\t\t<br \/>\r\n\t<\/p>\r\n\t<p>\r\n\t\thttp:\/\/oss-cn-qingdao.aliyuncs.com\/tiefenapp-oss\/Uploads\/file\/26\/image\/2016-05-03\/mobile5728a5bae6d05.JPG\r\n\t<\/p>\r\n\t<p>\r\n\t\t<br \/>\r\n\t<\/p>\r\n\t<p>\r\n\t\t&nbsp; &nbsp; &nbsp; &nbsp;用户评论\r\n\t<\/p>\r\n<\/p>
好多<等需要转换后的标签
首先第一步将标签转换成html的标签,我在网上没有找到java的转换函数,这里用到了自己写的函数,如果有好的方法,大家评论提意见:
static final String mbs = "&#(\\d+);"; // like "ロ"
public static String EncodeCesToChars(String paramStr) {
paramStr = paramStr.replace("&","&")
.replace("<","<")
.replace(">",">")
// .replace(""","\"")
.replace(" "," ")
.replace("'","'");
String mbChar;
StringBuffer sb = new StringBuffer();
Pattern pat = Pattern.compile(mbs);
Matcher mat = pat.matcher(paramStr);
while (mat.find()) {
mbChar = getMbCharStr(mat.group(1)); // pass the digit part
mat.appendReplacement(sb, mbChar);
}
mat.appendTail(sb);
return new String(sb);
}
/* worker method */
static String getMbCharStr(String digits) { // handle "12525" part which is
// a
char[] cha = new char[1]; // Unicode value stringnized
try {
int val = Integer.parseInt(digits);
char ch = (char) val;
cha[0] = ch;
} catch (Exception e) {
System.err.println("Error from getMbCharStr:");
e.printStackTrace(System.err);
}
return new String(cha); // easy!, because Java uses Unicode
}
调用EncodeCesToChars()函数即可。
接着需要将图片适应屏幕大小和文字自动换行:
首先图片大小可以用css来控制:
"<style>"+"img{" +"max-width:100%;" +"height:auto}"+"</style>"
文字换行也可以用css:
<body width='100%' style=\"word-wrap:break-word; font-family:Arial\">"
这样就可以实现图片适应屏幕的大小并且实现文字自动换行,如果css不生效可以给webview设置支持js:
settings.setJavaScriptEnabled(true);
ok.