实现评论,回复功能

12 篇文章 0 订阅

实现跟qq空间和朋友圈一样的评论,回复功能,一个textView中的文字,有的字体颜色不同,而且具备点击效果,之前想办法用多个textview来实现,但是碰到换行的问题,然后就用了个相对布局把回复的textview叠加在别的textview上面,但是这样一来要计算评论人和回复人的textview的文字长度,但是这样会遇到另外一个问题就是需要耗时操作,会直接卡在那里(ANR),开子线程也是行不通。应为这个我是用2个listview嵌套在一起来实现的,第二个listview是需要动态计算长度的。最终用了以下的方法,便可以轻松实现

方法如下

//需要非常注意的是:设置部分字体颜色的代码必须写在设置文字点击事件的下面,不然设置字体颜色会没有效果(默认是绿色的),之前看网上很多资料都没介绍到这个点,结果自己查了老半天都没搞定,最后改变了一下字体效果就成功了

 final String replyNickName = "喊美美啊";
 final String commentNickName ="欧巴沙拉呦";
 String replyContentStr = "你写的文章非常好,我很喜欢";
 //用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果
 //Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
 //Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)
 //Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)
 //Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)
 SpannableString ss = new SpannableString(replyNickName+"回复"+commentNickName
         +":"+replyContentStr);
 //为回复的人昵称添加点击事件
 ss.setSpan(new TextSpanClick(true), 0,
         replyNickName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 //为评论的人的添加点击事件
 ss.setSpan(new TextSpanClick(false),replyNickName.length() + 2,
         replyNickName.length() + commentNickName.length() + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 ss.setSpan(new ForegroundColorSpan(Color.RED),0,
         replyNickName.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

 ss.setSpan(new ForegroundColorSpan(Color.RED),replyNickName.length()+2,
         replyNickName.length()+commentNickName.length()+2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

 //添加点击事件时,必须设置
tvContent.setText(ss);
tvContent.setMovementMethod(LinkMovementMethod.getInstance());
//部分字体点击效果的监听如下

private final class TextSpanClick extends ClickableSpan {
    private boolean status;
    public TextSpanClick(boolean status){
        this.status = status;
    }
    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);//取消下划线
    }
    @Override
    public void onClick(View v) {
        String msgStr ="";
        if(status){
            msgStr = "我是回复的人";
        }else{
            msgStr = "我是评论的人";
        }
        Toast.makeText(FoodDetail.this, msgStr, Toast.LENGTH_SHORT).show();
    }
}

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值