Виділення кольору тексту за допомогою Html.fromHtml () в Android?


84

Я розробляю програму, в якій буде екран пошуку, де користувач може шукати певні ключові слова, і це ключове слово має бути виділеним. Я знайшов метод Html.fromHtml.

Але я хотів би знати, чи правильно це робити чи ні.

Будь ласка, повідомте мені ваші погляди на це.


перевірити робочий приклад. javatechig.com/2013/04/07/how-to-display-html-in-android-view
Ніланшал

Відповіді:


197

Або набагато простіше, ніж мати справу з Spannables вручну, оскільки ви не сказали, що хочете виділити фон, а лише текст:

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);

8
Варто зазначити, що Html.fromHtml працює повільніше, ніж SpannableString, оскільки передбачає синтаксичний аналіз. Але для короткого тексту це не має значення
Міхал К

Здається, є інше рішення за посиланням . Дивіться відповідь від Legend.
Кеннет Еванс,

1
Як коментар, я виявив, що мені не потрібно передавати TextView.BufferType.SPANNABLE, і він все ще працював. Дякую!
Джеймс,

чи знаєте ви який-небудь редактор HTML для аранжування довгого тексту для android. наприклад, я намагаюся використовувати цей сайт ( html.am/html-editors/html-text-editor.cfm ), але якщо я хочу побачити джерело, він повертає колір як, <span style="color:#ff0000;">щоб android не міняв колір.
mehmet

@mehmet Можна, мабуть, просто здійснити пошук та заміну, щоб змінити теги <span> на теги <font> з атрибутом "колір".
Крістофер Орр

35

Використання значення кольору з ресурсу 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); 

красиво зроблено. корисно мати можливість використовувати кольори з ресурсів ваших програм.
speedynomads

Я хочу наголосити на другому рядку, де ви підстрокуєте шістнадцятковий колір: значення альфа зробить налаштування кольору недійсним! Не забувайте!
marcolav 20.03.18

12

Цього можна досягти за допомогою 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 червоним кольором. Сподіваюся, це допомагає!


5
 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
    }

як отримати колір шрифту з color.xml?
Нур Хоссен

4

Альтернативне рішення: використання замість цього 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

Щоб зробити частину тексту підкресленою та кольоровою

у вашому 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
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

Він надасть кольору саме того, що ви зробили в редакторі html, просто встановіть textview і поєднайте його зі значенням textview. Android не підтримує колір кольорів, змініть його на колір шрифту в редакторі, і все готово.


0

Спочатку перетворіть ваш рядок у HTML, а потім перетворіть його на розширюваний. зробіть, як пропонують наступні коди.

 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);
            
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.