在Android中使用Html.fromHtml()突出显示文本颜色?


84

我正在开发一个应用程序,其中将有一个搜索屏幕,用户可以在其中搜索特定的关键字,并且该关键字应突出显示。我发现了Html.fromHtml方法。

但是我想知道它是否是正确的方法。

请让我知道您对此的看法。



Answers:


197

或比Spannable手动处理s简单得多,因为您没有说要突出显示背景,而只是说文本:

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

8
值得注意的是,Html.fromHtml比SpannableString慢,因为它涉及解析。但是,对于一个简短的文字也没关系
米哈尔ķ

link似乎还有另一种解决方案。参见图例的答案。
肯尼斯·埃文斯

1
就像评论一样,我发现我不需要传递TextView.BufferType.SPANNABLE,它仍然可以正常工作。谢谢!
詹姆斯,

您是否知道用于为Android配置长文本的任何HTML编辑器。例如,我正在尝试使用此网站(html.am/html-editors/html-text-editor.cfm),但是如果我想查看源代码,它将返回color,<span style="color:#ff0000;">以便android不会更改颜色。
mehmet

@mehmet您可能只是搜索并替换,即可将具有“颜色”属性的<span>标签更改为<font>标签。
Christopher Orr 2014年

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 2013年

我想强调第二行,在这里您将颜色的十六进制子字符串化:alpha值会使颜色设置无效!不要忘记它!
marcolav

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获取字体颜色?
Noor Hossain

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");

2

字体已弃用,请改用span Html.fromHtml("<span style=color:red>"+content+"</span>")


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 spannable = new SpannableString(Html.fromHtml(labelText));
                    
spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.