21

我需要为我的程序创建一个“信息”。我想用几种颜色、样式、字体等填充信息文本。

我发现这个链接有一种方法来实现它。

有没有其他方法(更好或更容易)来做到这一点?

4

4 回答 4

15

阅读您的问题标题后,我准备为您提供指向该文章的链接。我发现使用跨度并且SpannableString非常强大。另一种方法是对文本使用 HTML 格式,这可以通过Html.fromHtml()来完成。

但是,尚不清楚支持哪些 HTML 标记,因为文档仅显示:

此类将 HTML 字符串处理为可显示的样式文本。并非所有 HTML 标记都受支持。

因此,对于一个好的解决方案,我肯定会采用SpannableString本文中的方法。这种方法在实践中非常方便,因为您还可以创建自己的跨度类来扩展现有的类(例如,如果您想让一段文本使用未内置的自定义字体)。

于 2012-11-12T20:05:52.510 回答
13

我在周末写了一个库来处理这个问题,我称之为RichTextView

该库允许您格式化一段文本(使其变为粗体、下划线、斜体、组合等)以及为其着色(文本颜色和突出显示)。在下一个版本中,我计划允许自定义字体跨度等。

使用它很简单,只需将以下依赖项添加到您的 gradle 文件中:

compile 'com.androidessence.lib:richtextview:1.0.1'

现在,假设您要将前四个字符加粗,您可以简单地进行以下调用:

myRichTextView.formatSpan(0, 4, RichTextView.FormatType.BOLD);

请注意,结束索引参数不包含在内,因此通过说 (0 -> 4) 我们实际上是粗体索引 (0 -> 3)。

如果您想同时使用粗体和下划线,请使用 EnumSet:

myRichTextView.formatSpan(0, 4, EnumSet.of(RichTextView.FormatType.BOLD, RichTextView.FormatType.UNDERLINE));

有关最新信息,请参阅上面链接的 Github 存储库,但我会在此答案过时时尝试更新此答案。

于 2016-04-04T14:08:34.603 回答
5

过去当我需要格式化文本时,我创建了一个带有格式化的 html 文件,将其粘贴在 res/raw 目录中并将其加载到 WebView 中。我以前从未尝试过使用不同的字体,所以不确定这是否可行,但粗体和斜体等会起作用。

于 2012-11-12T20:04:38.820 回答
0

科特林

如果不需要很复杂的样式,可以使用这种原生方式:

val newText = buildSpannedString {
        bold { append("Hello ") }
        underline { append("World. ") }
        italic { append("2021 ") }
        append("Author: Caner")
    }
于 2021-12-07T17:59:57.253 回答