使用textview显示html里面的图文混排效果,并且图片可点击索引到

由于公司要求,需要将网页版的论坛网站改版成手机版的app。

服务器后台过滤掉了论坛帖子的不需要的html标签信息,只留了<img>和\n\r标签。

<img>使用Html.fromHtml可以解析出来图片信息,\n\r在android textview中直接支持换行

所以需要图文混排效果显示,需要服务器断将帖子信息格式规范下,不需要的过滤,只保留<img>标签,需要回车换行的需要加上\n\r。


之前我发了个帖子“使用LevelListDrawable在textview中显示多张图片”

由于

Html.fromHtml( String source, ImageGetter imageGetter, TagHandler tagHandler)
需要传入的参数有source为带<img>等textview支持内容字符串,imagegetter为获取图片的类,里面有getdrawable方法;taghandler为tag标签的控制类,里面有handletag方法;

我们在重写的imagegetter类里使用异步下载,并且使用了Map<String, SoftReference<Bitmap>> mBitmapCache;实现了缓存处理,解决翻页的时候不需要再去加载,直接找内存里是否缓存了。如果图片需要居中显示,只要让textview.setGravity(Gravity.Center_Horiz....);

在重写的taghandler我是这样定义这个重写的类的

class MSpan extends ClickableSpan implements OnClickListener

可以在onclick方法里实现textview里面图片的点击事件,在handletag里面实现output.setSpan(new MSpan(tt), sIndex, eIndex,
                        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

将参数传入。


最后注意要实现点击效果,必须要textview。setclickable和setMovementMethod(LinkMovementMethod.getInstance());才行。


之前有个下划线问题,无法去除下划线

//无下划线超链接,使用textColorLink、textColorHighlight分别修改超链接前景色和按下时的颜色
	private class NoLineClickSpan extends ClickableSpan { 
		SpannableString text;

	    public NoLineClickSpan(SpannableString text) {
	        super();
	        this.text = text;
	    }

	    @Override
	    public void updateDrawState(TextPaint ds) {
	        ds.setColor(Color.BLACK);
	        ds.setUnderlineText(false);
	    }

	    @Override
	    public void onClick(View widget) { 
	    	//点击超链接时调用
//	        processHyperLinkClick(text); 
	    }
	}

 ClickableSpan clickspan = new NoLineClickSpan(msp);
				msp.setSpan(clickspan, 0, msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
可以解决去掉下划线!

整理整理挂到github上去做个库开源。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值