2016-08-08 44 views
0

我有一個字符串,例如:「@user喜歡你的照片!2小時前」用細字體。我無法使用setSpan工作

該字符串由3部分組成;

1:@user - >應該是typeface.normal和點擊

2:喜歡你的照片! - >這保持不變(薄和黑色)

3:2h前 - >這應該是灰色的。

Spannable spannedTime = new SpannableString(time); 
Spannable clickableUsername = new SpannableString(username); 
clickableUsername.setSpan(new StyleSpan(Typeface.NORMAL), 0, clickableUsername.length(), 0); // this is for 1st part to make it normal typeface 
spannedTime.setSpan(new BackgroundColorSpan(Color.GRAY), 0, spannedTime.length(), 0); // this is for 3rd part to make it gray 

clickableUsername.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View view) { 
     CallProfileActivity(); 
    } 
}, 0, clickableUsername.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);// this is for 1st part to make it clickable 

this.setText(clickableUsername + " " + notificationBody + " " + spannedTime); 

但他們都沒有任何影響。

+0

定義「不工作」... CallProfileActivity()是做什麼的? –

+0

請參閱BackgroundColorSpan,StyleSpan和ClickableSpan,它們都不起作用。 CallProfileActivity();作品完全正確,它只是開啓一項活動。 –

+0

您能否提供[mcve],以便我們可以嘗試重現此問題? –

回答

2

java編譯器不知道關於Spannable。當你做

this.setText(clickableUsername + " " + notificationBody + " " + spannedTime); 

的Java創建String concatination所有SpannableString

要創建一個像你想要做的spannable字符串,你應該使用SpannableStringBuilder

SpannableStringBuilder spannable = new SpannableStringBuilder(); 
spannable.append(clickableUsername, new StyleSpan(Typeface.NORMAL), 0); 
spannable.append(' ').append(notificationBody).append(' '); 
spannable.append(time, new BackgroundColorSpan(Color.GRAY), 0); 
spannable.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View view) { 
     CallProfileActivity(); 
    } 
}, 0, username.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); 
this.setText(spannable);