Можно ли изменить цвет текста в строке на несколько цветов в Java?

Я имею в виду, возможно ли изменить текст «Этот текст синим» на синий цвет в одной строке? Должен быть способ …

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

Solutions Collecting From Web of "Можно ли изменить цвет текста в строке на несколько цветов в Java?"

Да, возможно. Для этого вам нужно использовать SpannableString и SpannableString .

Это должно выглядеть примерно так:

 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)); 

И результат будет таким.

результат

Я создал такой класс:

 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(") "); } 

Чтобы создать ленту тикера. Работает очень хорошо и сохраняет код в чистоте.

Вы можете попробовать это: во фрагменте:

 @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); 

Вы можете видеть это

Введите описание изображения здесь