gpt4 book ai didi

java - 在 TextView 中附加 HTML 内容

转载 作者:行者123 更新时间:2023-12-01 08:54:52 25 4
gpt4 key购买 nike

让我们想象一个用例,我需要在 Android 上创建一个记录器,在 TextView 中显示所有内容。

所以我创建了一个多行TextView。然后初步有了一个向 TextView 添加简单文本的方法:

TextView output; // Initialized in onCreate
public static void log(final String text) { // Method is called always when Log.log is called
output.append(text + "\n");
}

这就像一个魅力,但我想在日志返回一些错误信息(例如 HTTP 500)时添加红色文本(或文本背景)。所以我更新了方法并使用了一些 html:

public static void log(final String text) {
String newText = output.getText().toString();
if (text.contains("500")) {
newText += "<font color='#FF0000'><b>" + text + "</b></font><br />";
} else {
newText += text + "<br />";
}
output.setText(Html.fromHtml(newText), TextView.BufferType.SPANNABLE);
}

但它总是只格式化当前的“文本”,而之前的所有内容 (output.getText()) 都没有格式化。看来 TextView 不会保留带有 HTML 标签的文本,而只是立即进行装饰。

我尝试过类似的方法:

spannableString.setSpan(new BackgroundColorSpan(color), 0,
text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

output.setText(spannableString, TextView.BufferType.SPANNABLE);

它做了彩色背景,但只是当前文本。我想要像白线这样的输出,当大约 500 条时显示一些红线(所以它是动态的)。

有什么想法吗?

最佳答案

好的,经过更深入的搜索,我发现了 SpannableStringBuilder 并更改了代码:

public static void log(final String text) {
// Could be instantiate just once e.g. in onCreate and here just appending
SpannableStringBuilder ssb = new SpannableStringBuilder(output.getText());
if (text.contains("500")) {
ssb.append(coloredText(text + "\n", Color.parseColor("red")));
} else {
ssb.append(text).append("\n");
}
output.setText(ssb, TextView.BufferType.SPANNABLE);
}


private static SpannableString coloredText(String text, int color) {
final SpannableString spannableString = new SpannableString(text);
try {
spannableString.setSpan(new BackgroundColorSpan(color), 0,
text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
} catch (Exception e) {}
return spannableString;
}

这样就成功了

关于java - 在 TextView 中附加 HTML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com