类似QQ空间中回复列表的样式 "小明 回复 小红"

类似QQ空间中回复列表的样式 "小明 回复 小红" ,单独textview控件完成。

public class CommentTextView extends TextView {

	public CommentTextView&lt(Context context) {
		super(context);
	}

	public CommentTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public CommentTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	public void setText(CharSequence text, BufferType type) {
		if (!TextUtils.isEmpty(text)) {
			super.setText(replace(text.toString()), type);
		} else {
			super.setText(text, type);
		}
	}
	// 参数传进来
	private User namea, nameb;

	public void setComment(User namea, User nameb, Context context,
			CommentList mcomment) {
		this.namea = namea;
		this.nameb = nameb;
	}

	private Pattern buildPattern() {
		return Pattern.compile("\\\\ue[a-z0-9]{3}", Pattern.CASE_INSENSITIVE);
	}

	private CharSequence replace(String text) {
		try {
			SpannableString spannableString = new SpannableString(text);
			int start = 0;
			Pattern pattern = buildPattern();
			Matcher matcher = pattern.matcher(text);
			while (matcher.find()) {
				String faceText = matcher.group();
				String key = faceText.substring(1);
				BitmapFactory.Options options = new BitmapFactory.Options();
				Bitmap bitmap = BitmapFactory.decodeResource(
						getContext().getResources(),
						getContext().getResources().getIdentifier(key,
								"drawable", getContext().getPackageName()),
						options);
				ImageSpan imageSpan = new ImageSpan(getContext(), bitmap);
				int startIndex = text.indexOf(faceText, start);
				int endIndex = startIndex + faceText.length();
				if (startIndex >= 0)
					spannableString.setSpan(imageSpan, startIndex, endIndex,
							Spannable.SPAN_USER);
				start = (endIndex - 1);
			}
			// 评论者的姓名点击事件
			spannableString.setSpan(new ClickableSpan() {
				@Override
				public void onClick(View widget) {
					
				}

			}, 0, namea.getNickname().length(), Spanned.SPAN_USER);
			// 被评论者的姓名点击事件
			spannableString.setSpan(new ClickableSpan() {
				@Override
				public void onClick(View widget) {
					
				}
			}, namea.getNickname().length() + 4, namea.getNickname().length() + 4 + nameb.getNickname().length() - 1,
					Spanned.SPAN_USER);
			//上面+4是因为实际显示的内容为     "小明(文字变色)(空格)回复(空格)小红(文字变色)"
			return spannableString;
		} catch (Exception e) {
			return text;
		}
	}
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值