1

我在textview中使用2部分,第一部分是日期另一個是名稱和電子郵件。 它們都在同一個textview中引用。我想改變日期的顏色,使它與名稱和電子郵件不同。是否有可能在沒有爲名稱和電子郵件實際添加全新的文本視圖的情況下執行此操作? 這裏是我到目前爲止的代碼:如何更改我的textview的某個部分的顏色?

String nameandemail; 
holder.mytext.setText(String.valueOf(dateFormat.format(new Date(msg.getDate())) + " " + nameandemail + ": ")); 

如何讓這樣我可以設置日期的顏色與 holder.mytext.setTextColor(Color.white)併爲nameandemail串像綠色的嗎?

謝謝!

+1

您可以用' Html.fromHtml'或者'Spannable字符串'('ForegroundColorSpan') – Blackbelt

+0

你可以顯示它與我的代碼?我如何使用這種格式? –

+0

我嘗試了幾個foregroundcolorspans和spannables,它根本沒有工作 –

回答

1

,你可以在你的strings.xml文件

<string name="test2">&lt;font color=\'#FFFFFF\'>%1$s&lt;/font> -- &lt;font color=\'#00FF00\'>%2$s&lt;/font></string> 

,然後定義字符串編程

TextView tv = (TextView) findViewById(R.id.test); 
tv.setText(Html.fromHtml(getString(R.string.test2, String.valueOf(dateFormat.format(new Date(msg.getDate())), nameandemail))); 
+0

真棒工作!謝謝!你也碰巧有一個關於我想知道的其他問題的線索:http://stackoverflow.com/questions/33226491/how-do-i-display-the-calendar-date-on-the-top -of-聊天消息/ 33226608#33226608 –

0

我的建議是使用Spannable

這是一個簡短的使用方法,我打包供您使用。您只需傳遞TextView,全文和單個部分以從全文中重新着色。

可以將此方法放置到utils的類並調用它,只要你想要的,或保持在一個活動或片段(或其他任何地方),如果你在一個類中使用它:

public static void colorText(TextView view, final String fullText, final String whiteText) { 
    if (fullText.length() < whiteText.length()) { 
     throw new IllegalArgumentException("'fullText' parameter should be longer than 'whiteText' parameter "); 
    } 
    int start = fullText.indexOf(whiteText); 
    if (start == -1) { 
     return; 
    } 
    int end = start + whiteText.length(); 

    SpannableStringBuilder finalSpan = new SpannableStringBuilder(fullText); 
// finalSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(view.getContext(),R.color.your_own_color_code)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    finalSpan.setSpan(new ForegroundColorSpan(Color.WHITE), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
    view.setText(finalSpan); 
} 
+0

這是我第一次嘗試。它崩潰的錯誤字符串擴展beloynd限制30 –

+0

但你不應該使用這些數字。你應該適應你自己的需要,並使用你想改變顏色的文字的起始字符位置,替換15並使用字符串中最後一個字符的位置而不是30. – Mike

+0

請檢查編輯後的答案。我包了一個廣義的方法供你使用... – Mike

1

您可以使用spans

final SpannableStringBuilder sb = new SpannableStringBuilder("your text here"); 

// Set text color to some RGB value 
final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); 

// Make text bold 
final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); 

// Set the text color for first 6 characters 
sb.setSpan(fcs, 0, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

// make them also bold 
sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

textView.setText(sb); 

您還可以使用HTML像下面

myTextView.setText(Html.fromHtml(text + "<font color=white>" + some_text + "</font><br><br>" 
     + some_text)); 
+0

沒有人工作 –