【问题标题】:Formatting long paragraphs in android TextView在android TextView中格式化长段落
【发布时间】:2020-04-28 19:17:32
【问题描述】:
我有很多文本(超过 10000 字)想在我的 Android 应用程序上显示。文本包含项目符号、段落和换行符。我想知道如何在没有手动编辑的情况下在我的应用程序上显示。不可能将每个换行符转换为\n,将每个制表符转换为\t。我也尝试过在 HTML 中解析数据,然后使用 Html.fromHtml(getString(R.string.text))。但是,我得到的显示看起来完全没有格式化。
这就是我希望文本在应用中的样子:
【问题讨论】:
标签:
java
android
xml
android-layout
【解决方案1】:
HTML 标记是简单问题的简单解决方案,例如使文本变为粗体、斜体,甚至显示项目符号。要设置包含 HTML 标记的文本,请调用 Html.fromHtml 方法。在底层,HTML 格式被转换为 span。请注意,Html 类并不支持所有 HTML 标记和 CSS 样式,例如让项目符号点另一种颜色。
val text = "My text <ul><li>bullet one</li><li>bullet two</li></ul>"
txtview.text = Html.fromHtml(text)
跨度允许您通过更细粒度的自定义来实现多样式文本。例如,您可以通过应用 BulletSpan 将文本段落定义为具有项目符号点。您可以自定义文本边距和项目符号之间的间隙以及项目符号的颜色。从 Android P 开始,您甚至可以设置项目符号点的半径。您还可以为跨度创建自定义实现。查看下面的“创建自定义跨度”部分以了解如何操作。
val spannable = SpannableString("My text \nbullet one\nbullet two")
spannable.setSpan(
BulletPointSpan(gapWidthPx, accentColor),/* start index */ 9, /* end index */ 18,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
spannable.setSpan(BulletPointSpan(gapWidthPx, accentColor),/* start index */ 20, /* end index */ spannable.length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
txtview.text = spannable