Можно ли изменить цвет текста в строке на несколько цветов в Java?
Я имею в виду, возможно ли изменить текст «Этот текст синим» на синий цвет в одной строке? Должен быть способ …
- findviewbyid возвращает null в диалоговом окне
- Как вызвать метод в определенное время в java?
- Как просмотреть файл Realm в браузере Realm?
- java.net.UnknownHostException: Невозможно разрешить хост «»: нет адреса, связанного с именем хоста, и Конец ввода с символом 0
- SDK Manager.exe не работает
- отображение AM и PM в маленькой букве после форматирования даты
- Создайте библиотеку Jar для Android для распространения
- Библиотека PDF для рендеринга файлов PDF в Android
- как возобновить прерванный скачать
- Неудачное обнаружение службы с использованием Bluetooth на Android
- почему мой метод сравнения исключает исключение - метод сравнения нарушает общий контракт!
- Обновите обновление ProgressBar
- Добавить ярлык для приложения для Android. На главный экран.
Да, возможно. Для этого вам нужно использовать 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);
Вы можете видеть это