要实现一个仿微信那样的点赞列表,显示好友的昵称,中间用逗号隔开,并且点击好友昵称跳转到好友的详情页或者实现其他的操作。效果图如下:
第一步:我们需要先定义一个view,去实现列表的显示和点击事件:
public class LikesView extends TextView { private Context mContext; private List<LikeBean> list; private int size; public LikesView(Context Context) { this(Context, null); } public LikesView(Context Context, @Nullable AttributeSet attrs) { this(Context, attrs, 0); } public LikesView(Context Context, @Nullable AttributeSet attrs, int defstyleattr) { super(Context, attrs, defstyleattr); mContext = Context; } /** * 设置点赞数据 * * @param list */ public void setList(List<LikeBean> list,int size) { this.list = list; this.size = size; } /** * 刷新点赞列表 */ public void notifyDataSetChanged() { if (list == null || list.size() <= 0) { return; } SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(setImageSpan()).append(" "); for (int i = 0; i < list.size(); i++) { // 我写的最多显示9个昵称,超过的就不显示了 if (i > 9) { break; } LikeBean item = list.get(i); builder.append(setClickableSpan(item.getName(), item)); // 昵称之间用逗号隔开,也可以定义其他符号,看心情咯 if (i != list.size() - 1) { builder.append(" , "); } else { builder.append(" "); } } // 如果长度超过10个,就省略显示 if (size > 10) { builder.append("等" + size + "个人点赞了"); } setText(builder); setMovementMethod(new LinkMovementMethod()); } /** * 设置用户名字点击事件 * * @param item * @param bean * @return */ public SpannableString setClickableSpan(final String item, final LikeBean bean) { final SpannableString string = new SpannableString(item); ClickableSpan span = new ClickableSpan() { @Override public void onClick(View widget) { // TODO 这里写你的逻辑,处理昵称的点击事件 } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); // 设置昵称的颜色 ds.setColor(Color.parseColor("#3865A8")); ds.setUnderlineText(false); } }; string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return string; } /** * 设置点赞图标 * * @return */ private SpannableString setImageSpan() { String text = " "; SpannableString imgSpanText = new SpannableString(text); // 这里是在点赞列表的最前面加上心形的图标,可以改成自己需要的 imgSpanText.setSpan(new ImageSpan(getContext(), R.mipmap.blue_like, DynamicDrawableSpan.ALIGN_BASELINE), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return imgSpanText; }
第二步:控件定义好了,就可以开始使用了,先在布局里面写一下:
<LikesView android:id="@+id/like_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:nestedScrollingEnabled="false" <!--设置字体直接的间隔--!> android:lineSpacingExtra="3dp" />
第三步:在activity中设置数据源并刷新列表:
LikesView mLikesView = findViewById(R.id.like_view); // 数据源类型可以自己根据实际要求去改变,我这里里面放了user_id,name,head_img_url List<LikeBean> mLikeList = new ArrayList(); mLikeList.add(new LikeBean("1","张三","")); mLikeList.add(new LikeBean("2","李四","")); mLikeList.add(new LikeBean("3","王五","")); // 我项目里并没有把所有的点赞好友返回过来,所以把size单独分开写了 mLikesView.setList(mLikeList , mLikeList.size()); mLikeView.notifyDataSetChanged();
第四步:这样子,就全部实现了,一个简单的好友点赞列表的实现。