若是想
單獨設置TextView上其中幾個字的樣式
,該怎麼辦?
答案是使用SpannableString。
使用SpannableString能夠爲TextView上的某字或某些字設置:
想要實現自定義的樣式,查看這個文檔:
1. 簡單示例
設置文字的前景色
1 SpannableString name = new SpannableString("abc");html
2 ForegroundColorSpan nameSpan =
new ForegroundColorSpan(Color.BLUE);
3 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
4 textView.setText(name);
2. 使用SpannableStringBuilder構造複雜的樣式
例如,咱們寫一個聊天程序,須要將用戶名設置成綠色,將聊天內容設置成紅色,能夠這麼幹:
1 SpannableStringBuilder spanBuilder =
new SpannableStringBuilder();
2
//
name
3
SpannableString name =
new SpannableString("name");
4 ForegroundColorSpan nameSpan =
new ForegroundColorSpan(Color.BLUE);
5 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
6 spanBuilder.append(name);
7
8
//
msg
9
SpannableString msg =
new SpannableString("msg");
10 ForegroundColorSpan msgSpan =
new ForegroundColorSpan(Color.RED);
11 msg.setSpan(msgSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
12 spanBuilder.append(msg);
13
14 textView.setText(spanBuilder); android
3. 插入圖片
1
//
image
2
SpannableString image =
new SpannableString("image");
3 ImageSpan imageSpan =
new ImageSpan(ctx, imageResourceId, DynamicDrawableSpan.ALIGN_BASELINE);
4 image.setSpan(imageSpan, 0, image.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
5
6 textView.setText(image);
4. 爲文字設置點擊事件
若是咱們須要問某個字或某幾個字設置點擊事件,能夠這麼幹:
1
//
name
2
ClickableSpan clickSpan =
new ClickableSpan() {
3
4 @Override
5
public
void onClick(View widget) {
6 Toast.makeText(context, "clickspan", Toast.LENGTH_LONG).show();
7 }
8 @Override
9
public
void updateDrawState(TextPaint ds) {
10
super.updateDrawState(ds);
11
//
去掉下劃線
12
ds.setUnderlineText(
false);
13
14
//
設置文字顏色
15
ds.setColor(Color.BLUE);
16 }
17 };
18
19 SpannableString name =
new SpannableString(cmd.srcName() + ":");
20 name.setSpan(clickSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
21
22 textView.setText(name); app
注意:默認狀態下,TextView不會響應點擊事件,還須要這麼設置一下:
1 txtView.setMovementMethod(LinkMovementMethod.getInstance());