2015-07-11 155 views
1

如何以編程方式更改我的視圖中某些文本的背景只使用盡可能少的代碼行?我試圖在HTML中使用背景標籤,但不幸的是它不支持,因此是否有任何可能的解決方法來實現像下面的圖像?以編程方式更改textview中某些文本的背景顏色

XML

<TextView 
    android:id="@+id/main_textView0" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    style="@android:style/TextAppearance.Medium"/> 

的Java

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    View v = getView(); 

    TextView txt = (TextView)v.findViewById(R.id.main_textView0); 
    txt.setText(Html.fromHtml("<font color='#0099CC'>" + getResources().getString(R.string.hello) + "</font>" + 
        " " + 
        "<font color='#000000'>" + getResources().getString(R.string.world) + "</font>" 
    )); 

    super.onActivityCreated(savedInstanceState); 
} 

enter image description here

+0

的HTML的方法可能是在這種情況下,唯一的解決辦法。 – Egor

+1

我建議你使用https://android-arsenal.com/網站,它有庫 –

回答

5

嘗試Spannable,是這樣的:

  String str1 = "Hello"; 
      String str2 = "world"; 
      String message = str1 + " " + str2; 

      Spannable spannable = new SpannableString(message); 
      spannable.setSpan(new ForegroundColorSpan(Color.BLUE),0, str1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

      textView.setText(spannable); 
+2

正確,然後用BackgroundColorSpan做同樣的事情。 – BladeCoder

+0

@BladeCoder如何設置str2的前景色?我只是簡單地將它添加到底下,還是我需要添加另一個Spannable? – MacaronLover

+0

我認爲str2具有TextView的默認文本顏色。你可以使用TextView.setTextColor() – BladeCoder

0

你的代碼是從UI線程調用(因爲它應該是),但調用HTML。 fromHtml(...)是非常非常耗費即 通過在LinearLayout中包裝幾個TextView並分別設置每個TextView,可以做得更好。它看起來可能不會看起來更好,但維護和保存cpu更容易。 特別是你打算使用這是一個recyclerview什麼的。

相關問題