Как вывести символы разных цветов?
Если коротко, то нужно поменять цвет отдельных символов, а не цвет всей строки. Например, все буквы Р красные
Я хочу сделать приложение, которое будет менять в тексте, полученным с EditText, цвет некоторых букв, и текст должен отобразиться уже в TextView с разными цветами после нажатия кнопки. Например, после введения в input строки "Hello World!" чтобы все l стали красного цвета.
public void onClick(View v) {
if (v.getId()==_ok_button.getId()){
String text=input_TextBox.getText().toString();
output_TextView.setText(text);
}
Как дополнить код, чтобы это осуществить?
Ответы (1 шт):
Что использовать (примерный вид кода):
Думаю, что тут пригодится работа с текстом или его частями как с html разметкой:
String text=input_TextBox.getText().toString();
String styledText = "<font color='red'>" + text + "</font>";
output_TextView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
Как использовать fromHtml:
Так как Html.fromHtml стал deprecated следует использовать такой метод:
HtmlCompat.fromHtml(styledText, HtmlCompat.FROM_HTML_MODE_LEGACY);
Пример снипета для HtmlCompat:
package com.pixplicity.example.utils;
import android.text.Html;
import android.text.Spanned;
public final class HtmlCompat {
public static Spanned fromHtml(String source) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
return Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
return Html.fromHtml(source);
}
}
}
Как форматировать цвет:
Чтобы поменять цвет символов в строке следует воспользоваться заменой с регулярными выражениями:
String str = "Hello World!";
str = str.replaceAll("(l)", "<font color='red'>$1</font>");
System.out.println(str);
К примеру этот код выведет строку:
He<font color='red'>l</font><font color='red'>l</font>o Wor<font color='red'>l</font>d!
Тут все буквы l будут красными, запустите снипет снизу чтобы увидеть примерный вид:
He<font color='red'>l</font><font color='red'>l</font>o Wor<font color='red'>l</font>d!
Вариант для WebView:
loadData
String base64 = android.util.Base64.encodeToString(styledText
.getBytes("UTF-8"), android.util.Base64.DEFAULT);
webView.loadData(base64, "text/html; charset=utf-8", "base64");