一個TextView設(shè)置部分內(nèi)容的點擊事件及樣式,Android的TextView中早已為開發(fā)人員提供好了這樣的API:
SpannableStringBuilder.class
This is the class for text whose content and markup can both be changed.
(這是一個內(nèi)容和標(biāo)記都可以更改的文本類)
快速實現(xiàn)
直接看代碼:
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("注冊即為同意《某某某協(xié)議》");
//設(shè)置部分文字點擊事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(MainActivity.this, "觸發(fā)點擊事件!", Toast.LENGTH_SHORT).show();
}
};
style.setSpan(clickableSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(style);
//設(shè)置部分文字顏色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
style.setSpan(foregroundColorSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//配置給TextView
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(style);
}
簡單介紹一下SpannableStringBuilder儒恋,這個類實際上就是對你的TextView中的文字進(jìn)行簡單的配置,配置好你想要的屬性后癣猾,直接調(diào)用下面代碼即可:
//設(shè)置光標(biāo)如何移動計量的方法
textView.setMovementMethod(LinkMovementMethod.getInstance());
//配置給TextView
textView.setText(style)
如何進(jìn)行各個屬性的配置呢沈善?我們以字體設(shè)置顏色為例:
//設(shè)置部分文字顏色
//創(chuàng)建字體顏色的Span,并初始化字體顏色屬性
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));
//我們設(shè)置第7~13個中間的字符為藍(lán)色
style.setSpan(foregroundColorSpan, 7, 13, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
SpannableStringBuilder和SpannableString主要通過使用setSpan(Object what, int start, int end, int flags)改變文本樣式色洞。
setSpan()方法對應(yīng)的參數(shù)如下:
start: 指定Span的開始位置
end: 指定Span的結(jié)束位置替蛉,并不包括這個位置贯溅。
flags:取值有如下四個
Spannable. SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括躲查,即在文本前插入新的文本會應(yīng)用該樣式它浅,而在文本后插入新文本不會應(yīng)用該樣式
Spannable. SPAN_INCLUSIVE_INCLUSIVE:前面包括,后面包括镣煮,即在文本前插入新的文本會應(yīng)用該樣式姐霍,而在文本后插入新文本也會應(yīng)用該樣式
Spannable. SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,后面不包括
Spannable. SPAN_EXCLUSIVE_INCLUSIVE:前面不包括典唇,后面包括
詳細(xì)實現(xiàn)方式都已經(jīng)在【Android】強大的SpannableStringBuilder @帶心情去旅行 中有很清楚的講解镊折,大家去原作者家查閱即可。