最近現(xiàn)在項(xiàng)目中遇到了一個(gè)需求 儒士,就是部分文字可以點(diǎn)擊和改變顏色 ,這其實(shí)還是ok的? 不是什么變態(tài)需求? 因?yàn)橐矝](méi)有做過(guò)? ?我感覺(jué)textview 自己就會(huì)有實(shí)現(xiàn)此需求的辦法? ?一百度還真有
廢話不多說(shuō)? 開(kāi)始上代碼
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.tvContent);
? ? ? ? final SpannableStringBuilder style = new SpannableStringBuilder();
//設(shè)置文字
style.append("如果你真的喜歡我胸竞,請(qǐng)瘋狂的點(diǎn)擊我把");
//設(shè)置部分文字點(diǎn)擊事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "觸發(fā)點(diǎn)擊事件!", Toast.LENGTH_SHORT).show();
}
};
style.setSpan(clickableSpan, 10, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(style);
//設(shè)置部分文字顏色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
style.setSpan(foregroundColorSpan, 10, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//配置給TextView
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(style);
}
}
但是這樣寫(xiě)的話確實(shí)很快實(shí)現(xiàn)了該效果
但是復(fù)用性不是很高 而且我現(xiàn)在不知道后臺(tái)返給我的具體的String是什么? 只知道點(diǎn)擊的是確定的 所以我有進(jìn)一步的優(yōu)化了這個(gè)方法
/**
*
? ? * @author 大圣
? ? * @time 2018/10/17 下午3:51
? ? * @param content 全部的文本
? ? * @param str? 點(diǎn)擊文本
? ? * @param len? 點(diǎn)擊文本的長(zhǎng)度
? ? * @param textView 組件textview
? ? * @param mListeners 接口回調(diào)
? ? * @param type? 分辨是哪個(gè)
*/
? ? private void callService(String content, String str,int len , TextView textView ,final MyDialogListener mListeners ,final int type) {
SpannableStringBuilder builder =new SpannableStringBuilder(content);
int i = content.indexOf(str);//截取文字開(kāi)始的下標(biāo)
? ? ? ? builder.setSpan(new ClickableSpan() {
@Override
? ? ? ? ? ? public void onClick(View widget) {
//點(diǎn)擊后的操作
? ? ? ? ? ? ? ? if (type ==1) {
mListeners.onClicktoH5();
}
if (type ==2) {
mListeners.onClicktoMy();
}
//? ? ? ? ? ? ? ? CommonUtils.call(mContext, "12351");
? ? ? ? ? ? }
@Override
? ? ? ? ? ? public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#0000FF"));//設(shè)置文字顏色
? ? ? ? ? ? ? ? ds.setUnderlineText(true);//設(shè)置下劃線//根據(jù)需要添加
? ? ? ? ? ? }
}, i, i + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(builder);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
嘻嘻 這個(gè)方法是我自己優(yōu)化過(guò)后的? 具體的傳參注釋也有? ?菜鳥(niǎo)亦可以明白其中的邏輯? ?也可以根據(jù)自己的需求來(lái)改? 嘻嘻 都半年多沒(méi)有寫(xiě)博客了? ?我又開(kāi)始強(qiáng)勢(shì)的回歸了