Я разрабатываю приложение, в котором будет экран поиска, где пользователь может искать определенные ключевые слова, и это ключевое слово должно быть выделено. Я нашел метод Html.fromHtml.
Но я хотел бы знать, правильный ли это способ сделать это или нет.
Пожалуйста, дайте мне знать ваше мнение по этому поводу.
Ответы:
Или намного проще, чем иметь дело с
Spannable
s вручную, поскольку вы не сказали, что хотите выделить фон, а только текст:String styledText = "This is <font color='red'>simple</font>."; textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
источник
<span style="color:#ff0000;">
так что Android не меняет цвет.Использование значения цвета из ресурса xml:
int labelColor = getResources().getColor(R.color.label_color); String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!! Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE);
источник
Это может быть достигнуто с помощью Spannable String. Вам нужно будет импортировать следующие
import android.text.SpannableString; import android.text.style.BackgroundColorSpan; import android.text.style.StyleSpan;
А затем вы можете изменить фон текста, используя что-то вроде следующего:
TextView text = (TextView) findViewById(R.id.text_login); text.setText(""); text.append("Add all your funky text in here"); Spannable sText = (Spannable) text.getText(); sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0);
При этом символы в позициях 1–4 будут выделены красным цветом. Надеюсь это поможет!
источник
String name = modelOrderList.get(position).getName(); //get name from List String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name /* check API version, according to version call method of Html class */ if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) { Log.d(TAG, "onBindViewHolder: if"); holder.textViewName.setText(context.getString(R.string._5687982) + " "); holder.textViewName.append(Html.fromHtml(text)); } else { Log.d(TAG, "onBindViewHolder: else"); holder.textViewName.setText("123456" + " "); //set text holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY)); //append text into textView }
источник
Альтернативное решение: вместо этого использовать WebView. С HTML легко работать.
WebView webview = new WebView(this); String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>"; webview.loadData(summary, "text/html", "utf-8");
источник
шрифт устарел, используйте вместо него диапазон
Html.fromHtml("<span style=color:red>"+content+"</span>")
источник
Чтобы часть вашего текста была подчеркнута и раскрашена
в вашем strings.xml
<string name="text_with_colored_underline">put the text here and <u><font color="#your_hexa_color">the underlined colored part here<font><u></string>
затем в деятельности
yourTextView.setText(Html.fromHtml(getString(R.string.text_with_colored_underline)));
и для интерактивных ссылок:
<string name="text_with_link"><![CDATA[<p>text before link<a href=\"http://www.google.com\">title of link</a>.<p>]]></string>
и в вашей деятельности:
yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link))); yourTextView.setMovementMethod(LinkMovementMethod.getInstance());
источник
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));
Он придаст цвет именно такой, какой вы сделали в редакторе HTML, просто установите текстовое представление и объедините его со значением текстового представления. Android не поддерживает цвет диапазона, измените его на цвет шрифта в редакторе, и все готово.
источник
Сначала преобразуйте вашу строку в HTML, а затем преобразуйте ее в spannable. сделать, как предлагают следующие коды.
Spannable spannable = new SpannableString(Html.fromHtml(labelText)); spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
источник
Добавляем также версию Kotlin с:
strings.xml
)colors.xml
)fun getMulticolorSpanned(): Spanned { // Get text from resources val text: String = getString(R.string.your_text_from_resources) // Get color from resources and parse it to HEX (RGB) value val warningHexColor = getHexFromColors(R.color.your_error_color) // Use above string & color in HTML val html = "<string>$text<span style=\"color:#$warningHexColor;\">*</span></string>" // Parse HTML (base on API version) return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY) } else { Html.fromHtml(html) } }
И расширение Kotlin (с удалением альфы):
fun Context.getHexFromColors( colorRes: Int ): String { val labelColor: Int = ContextCompat.getColor(this, colorRes) return String.format("%X", labelColor).substring(2) }
Демо
источник