WebView直接加载url,但是当加载的是string,带有html标签的时候,需要处理图片,甚至文字大小也不能正常显示。下面的类是在项目中遇到时做的封装。处理图片适应,文字大小适应等问题。
public interface IJsoupManager {
Document getJsoupDocument();
IJsoupManager jsoupReceiverHtml(String htmlContent);
String replaceHtmlImgLink() throws Exception;
String getLoadImgAddress();
String doLoadHtmlContentByFontAttr() throws Exception;
}
接口的实现类:
public class ClubJsoupImpl implements IJsoupManager{
private IJsoupManager mIJsoupManager;
private Document doc;
public ClubJsoupImpl createDecorator(IJsoupManager iJsoupManager){
this.mIJsoupManager = iJsoupManager;
return this;
}
@Override
public Document getJsoupDocument() {
return doc;
}
@Override
public IJsoupManager jsoupReceiverHtml(String htmlContent) {
mIJsoupManager.jsoupReceiverHtml(htmlContent);
doc = mIJsoupManager.getJsoupDocument();
return this;
}
@Override
public String replaceHtmlImgLink() throws Exception{// 图片适应
if (mIJsoupManager == null){
new Throwable("mIJsoupManager is null, please check");
}
String zHtml = mIJsoupManager.replaceHtmlImgLink();
Document doc = Jsoup.parse(zHtml.replace("\n", "").replace("\r", ""));
Elements elements = doc.getElementsByTag("img");
for (Element element : elements) {
element.attr("width","100%").attr("height","auto");
}
return doc.toString();
}
@Override
public String getLoadImgAddress() {
return LoadUrlUtils.pictureUrl;
}
@Override
public String doLoadHtmlContentByFontAttr() throws Exception{
if (mIJsoupManager == null){
new Throwable("mIJsoupManager is null, please check");
}
return mIJsoupManager.doLoadHtmlContentByFontAttr();
}
}
下面是两种使用类
public class JsoupManager {
private IJsoupManager instanceImpl;
public String obtainHtmlContentByDeal(String prevHtmlParam) throws Exception {
instanceImpl = new JsonManagerImpl().jsoupReceiverHtml(prevHtmlParam);
return instanceImpl.replaceHtmlImgLink();
}
/**
* -移植抚仙湖项目的实现处理-也是把那边的html字符串数据作为基本处理方式
* -扩展时可以继承此类或者采用本项目装饰器模式进行调用实现具体内容
*/
public static class JsonManagerImpl implements IJsoupManager{
protected String htmlContent;
protected Document doc;
public JsonManagerImpl(){
}
@Override
public Document getJsoupDocument() {
return doc;
}
@Override
public IJsoupManager jsoupReceiverHtml(String htmlContent) {
this.htmlContent = htmlContent;
doc = Jsoup.parse(htmlContent.replace("\n", "").replace("\r", ""));
return this;
}
@Override
public String replaceHtmlImgLink() throws Exception{
String html = null;
if (doc == null){
new Throwable("Jsoup Document is not null, please execute jsoupReceiverHtml() to new instance for Document Object");
}
Elements pngs = doc.select("img[src]");
for (Element element : pngs) {
String imgUrl = element.attr("src");
if (imgUrl.trim().startsWith("/")) {
if (getLoadImgAddress().equals("")){
new Throwable("please override function getLoadImgAddress(), promise it's value is not null or not \"\"");
}
imgUrl = getLoadImgAddress() + imgUrl;
element.attr("src", imgUrl);
}
}
html = doc.toString();
return html;
}
@Override
public String getLoadImgAddress() {
return "";
}
@Override
public String doLoadHtmlContentByFontAttr() throws Exception{
String html = null;
if (doc == null){
new Throwable("Jsoup Document is not null, please execute jsoupReceiverHtml() to new instance for Document Object");
}
Elements fonts = doc.select("span[style]");
for (Element element : fonts) {
String fontSize = element.attr("style");
if (fontSize.trim().contains("font-size")) {
fontSize = "font-size:48px;";
element.attr("style", fontSize);
}
}
return html.toString();
}
}
}
*****************************************************************************
public class HtmlManager {
/**
* webview数据
* @param originalHtmlContent
* @return
*/
public static String createHtmlContent(String originalHtmlContent){
IJsoupManager implIJsoupManager = new JsoupSrc().jsoupReceiverHtml(originalHtmlContent);
String htmlLoadStr = null;
try {
htmlLoadStr = implIJsoupManager.replaceHtmlImgLink();
} catch (Exception e) {
e.printStackTrace();
}
return htmlLoadStr;
}
private static class JsoupSrc extends JsoupManager.JsonManagerImpl {
@Override
public String getLoadImgAddress() {
return LoadUrlUtils.pictureUrl;
}
}
}