是否有可能将string中的文本颜色更改为Java中的多种颜色?

我的意思是,是否可以将文本“This text is blue”更改为单个string中的蓝色? 一定有办法…

<TextView android:gravity="left" android:padding="3dip" android:text="This text is white. This text is blue." android:textColor="#ffffff" android:textSize="22dp"/> 

  • 更改NumberPicker的文本颜色
  • 可以textview有不同颜色的字母?
  • Android的Linkify链接textColor忽略,CSS样式覆盖可能?
  • 是的,可能的。 为此,您需要使用SpannableStringForegroundColorSpan

    这应该看起来像这样:

     SpannableStringBuilder builder = new SpannableStringBuilder(); String red = "this is red"; SpannableString redSpannable= new SpannableString(red); redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0); builder.append(redSpannable); String white = "this is white"; SpannableString whiteSpannable= new SpannableString(white); whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0); builder.append(whiteSpannable); String blue = "this is blue"; SpannableString blueSpannable = new SpannableString(blue); blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0); builder.append(blueSpannable); mTextView.setText(builder, BufferType.SPANNABLE); 

    在这里输入图像说明

    一个简单的方法是使用HTML并以编程方式将文本设置为TextView

     String text = "This text is white. <font color=\"blue\">This text is blue.</font>"; textView.setText(Html.fromHtml(text), BufferType.SPANNABLE); 

    尝试这个..

     TextView update= (TextView) dialog.findViewById(R.id.address); String colorText= "Driver is nearby " + "<font color=\"#E72A02\"><bold>" + "43, KR Rd, Tata Silk Farm, Jayanagar" + "</bold></font>" + " and he is " + "<font color=\"#B92000\"><bold>" + "11 km" + "</bold></font>" + " & " + "<font color=\"#B92000\"><bold>" + "20 mins" + "</bold></font>" + " away from your current location."; update.setText(Html.fromHtml(colorText)); 

    结果会是这样的

    结果

    我创build了这样一个类:

     import android.text.SpannableStringBuilder; import android.text.style.CharacterStyle; public class StyleableSpannableStringBuilder extends SpannableStringBuilder { public StyleableSpannableStringBuilder appendWithStyle(CharacterStyle c, CharSequence text) { super.append(text); int startPos = length() - text.length(); setSpan(c, startPos, length(), 0); return this; } public StyleableSpannableStringBuilder appendWithStyle(CharacterStyle [] c, CharSequence text) { super.append(text); int startPos = length() - text.length(); for (CharacterStyle c1 : c) setSpan(c1, startPos, length(), 0); return this; } } 

    这允许我做这样的事情:

     private void buildTickerItem(DelayedQuoteServiceObject o) { Double lastPrice = Double.parseDouble(o.getValue("LastPrice")); Double dayChange = Double.parseDouble(o.getValue("DayChange")); Double percentChange = Double.parseDouble(o.getValue("PercentDayChange")) / 100; if (o.isIndex() == true) { tickerTapeData.appendWithStyle(new StyleSpan(Typeface.BOLD),o.getDisplayName()); tickerTapeData.append(" "+ indexFormat.format(lastPrice) + " ("); if (dayChange >= 0) tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), indexFormat.format(dayChange)); else tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), indexFormat.format(dayChange)); } else { tickerTapeData.appendWithStyle(new StyleSpan(Typeface.BOLD), o.ticker); tickerTapeData.append("@"+ dollarFormat.format(lastPrice) + " ("); if (dayChange >= 0) tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), dollarFormat.format(dayChange)); else tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), dollarFormat.format(dayChange)); } tickerTapeData.append("/"); if (dayChange >= 0) tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), percentFormat.format(percentChange)); else tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), percentFormat.format(percentChange)); tickerTapeData.append(") "); } 

    创build一个自动收报机磁带。 工作很好,并保持代码清洁。

    你可以试试这个:在一个片段中:

     @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.shipment_accepted_fragment, container, false); String email = "(abc@gmail.com)"; TextView shipment_email = (TextView) rootView .findViewById(R.id.textview); String text_shipment_email = "Hello" + " <font color='" + getResources().getColor(R.color.green_color) + "'>" + email + "</font>" + "Bye"; shipment_email.setText(Html.fromHtml(text_shipment_email), TextView.BufferType.SPANNABLE); } 

    如果服务“前进”,我正在使用变星

     String c = "*" + getResources().getString(R.string.rupee) + str_pay_at_store; SpannableString spannable2 = new SpannableString(c); spannable2.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv_payatstore.setText(spannable2); 

    你可以看到像这样

    在这里输入图像说明