描述:本人做的是电商项目,遇到一个问题。商品的价格,标题,图片等信息用原生安卓控件展示,但商品描述要用Html代码展示,即安卓客户端要无条件支持显示商家在后台用html编辑的商品描述(有不同颜色的字体和图片超链接)。按常理WebView支持展示一个url链接,怎么会直接展示Html代码呢,查了一下资料,WebView是支持的。
代码如下:
StringBuffer sb=new StringBuffer();
sb.append("<html>");
sb.append("<head><meta http-equiv="+YH+"content-type"+YH+" content="+YH+"text/html;ch arset=utf-8"+YH+"></head>");
sb.append("<body>");
//要展示的Html代码片段
String strTrim = StringUtil.StrTrim(result.getContent());
if(!TextUtils.isEmpty(strTrim)){
strTrim=strTrim.replace("<img","<img width="+YH+"100%%"+YH+" height="+YH+"auto"+YH);//处理图片宽度适应屏幕
strTrim=strTrim.replace("https://","http://");//片段在高版本中不支持https
}
sb.append(strTrim);
sb.append("</body>");
sb.append("</html>");
webView.loadDataWithBaseURL(null, sb.toString(),"text/html","UTF-8", "");
这样会有一个问题,WebView放在ScrollView中的LinearLayout中,但WebView的页面长度是不确定的,若把高写成自适应是不起作用的,页面显示不错来。所以WebView要放到一个自定义的框架布局中,框架布局放到线性布局中,这样WebView的页面有多少显示多少,且ScrollView支持上下滑动。
自定义框架布局代码如下:(在一个页面中webView只占用一部分使用)
public class AllFrameLayout extends FrameLayout {
public AllFrameLayout(Context context) {
super(context);
}
public AllFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expendsHeight=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expendsHeight);
}
}
这样就可以实现头部为安卓原生控件,下边为WebView加载Html代码片段,上下可以滑动,整体效果如原生控件一样。