要實現的效果
我們先看一下要實現的效果,就是一個非常常規的文本超鏈接
或者類似微博裏評論列表:
我們在點擊上邊藍色字體的時候都要跳轉對應的頁面。
實現方式
可能我們第一時間想到的方案就是使用Span去做,沒錯,這裏我們就用ClickSpan去實現這樣一個效果。
首先我們要自定義一個ClickSpan:
public SpannableString setClickableSpanContent(String item) {
final SpannableString string = new SpannableString(item);
ClickableSpan span = new ClickableSpan() {
@Override
public void onClick(View widget) {
//處理你的點擊事件
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 設置顯示的內容文本顏色
ds.setColor(getResources().getColor(R.color.base_blue));
ds.setUnderlineText(false);
}
};
string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return string;
}
然後,就可以使用這個span了,以上邊第一個圖爲例,那麼可能代碼會是這樣:
TextView userTerms = findViewById(R.id.terms_text);
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("我已閱讀");
builder.append(setClickableSpanContent("《未成年人隱私權保護政策》"));
userTerms.setText(builder);
userTerms.setMovementMethod(LinkMovementMethod.getInstance());
這樣就實現了上邊的需求。
當然這個是最簡單的,下邊微博列表那個稍微複雜一點,不是說實現效果複雜,而是業務邏輯稍微複雜一點,需要回復者和被回覆者的UserBean,然後回覆的評論等內容,這裏就不再多說了!整體還是比較簡單的!
問題
可能有些手機這個span的點擊默認帶有按下時的背景顏色,可能影響美觀,那麼怎麼去掉這個點擊時的背景顏色呢,很簡單:
userTerms.setHighlightColor(getResources().getColor(android.R.color.transparent));
設置textview的highlightColor爲透明就可以了~
延伸
這種比較簡單,那麼類似鬥魚這種直播的平臺,別人發送的彈幕列表,一個人帶有好多主播牌子的,還有個人等級的這種如何實現,我們下一篇再去了解!