Выделение цвета текста с помощью Html.fromHtml () в Android? - PullRequest
78 голосов
/ 28 апреля 2010

Я разрабатываю приложение, в котором будет экран поиска где пользователь может искать конкретные ключевые слова, и это ключевое слово должно быть подсвечен. Я нашел метод Html.fromHtml.

Но я хотел бы знать, является ли это правильным способом или нет.

Пожалуйста, дайте мне знать ваше мнение по этому вопросу.

Ответы [ 8 ]

189 голосов
/ 30 мая 2010

Или гораздо проще, чем иметь дело с Spannable s вручную, поскольку вы не сказали, что хотите, чтобы фон был выделен, просто текст:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);
34 голосов
/ 20 февраля 2013

Использование значения цвета из ресурса 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); 
12 голосов
/ 28 апреля 2010

Это может быть достигнуто с помощью 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 красным цветом. Надеюсь, это поможет!

4 голосов
/ 23 мая 2017
 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
    }
4 голосов
/ 28 апреля 2010

Альтернативное решение: вместо этого использовать 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");
1 голос
/ 24 апреля 2017

шрифт устарел, используйте span вместо Html.fromHtml("<span style=color:red>"+content+"</span>")

0 голосов
/ 05 октября 2018

Чтобы часть текста была подчеркнута и раскрашена

в вашем strings.xml

<string name="text_with_colored_underline">put the text here and &lt;u>&lt;font color="#your_hexa_color">the underlined colored part here&lt;font>&lt;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());
0 голосов
/ 19 февраля 2016
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

Это даст цвет точно, что вы сделали в HTML-редакторе, просто установите textview и сопоставьте его со значением textview. Android не поддерживает цвет диапазона, измените его на цвет шрифта в редакторе, и все готово к работе.

...