Можно ли изменить цвет текста в строке на несколько цветов в 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. This text is blue."; textView.setText(Html.fromHtml(text), BufferType.SPANNABLE); 

Попробуй это..

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

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

результат

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

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

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

Вы можете попробовать следующее: во fragmentе:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate( R.layout.shipment_accepted_fragment, container, false); String email = "([email protected])"; TextView shipment_email = (TextView) rootView .findViewById(R.id.textview); String text_shipment_email = "Hello" + " " + email + "" + "Bye"; shipment_email.setText(Html.fromHtml(text_shipment_email), TextView.BufferType.SPANNABLE); } 

Html.fromHtml(String) устарел в Android N

Для поддержки последней версии Android так что-то вроде этого

  val colorText = ("Some Normal Text\n" + " Orange Text " + "More Normal text") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { venueAddressValue.setText(Html.fromHtml(colorText, Html.FROM_HTML_MODE_LEGACY)); } else { venueAddressValue.setText(Html.fromHtml(colorText)); } 

Я использую звезду смены, если сервис «Вперед»

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

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

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

  • NoClassDefFoundError - Eclipse и Android
  • Что такое использование BaseColumns в Android?
  • Java Object.hashCode () - адрес или случайный ()?
  • Android-разрешение не работает, даже если я его объявил
  • Как остановить Proguard от удаления параметров типа?
  • Режим запуска «single top» для Android и onNewIntent
  • Сортировка с использованием Comparator-Descending order (Пользовательские classы)
  • почему мой метод сравнения исключает исключение - метод сравнения нарушает общий контракт!
  • Экранная видеозапись текущей активности Android
  • Android - запуск службы при загрузке
  • Как сортировать дату, которая находится в формате строки в java?
  • Давайте будем гением компьютера.