从您发布的代码中,您将新跨度传递给 spanStr 并要求它找到它们。您需要参考实际应用的那些跨度的实例。如果这不可行或者您不想直接跟踪跨度,您可以简单地调用
getSpan来应用所有跨度。然后,您可以根据需要过滤该数组。
如果您不特别关心跨度,您也可以调用Html.toHtml(spanStr)来获取带有 HTML 标记的版本。
编辑:添加代码示例
这将获取您想要的所有已应用的 StyleSpan。
/* From the Android docs on StyleSpan: "Describes a style in a span.
* Note that styles are cumulative -- both bold and italic are set in
* separate spans, or if the base is bold and a span calls for italic,
* you get bold italic. You can't turn off a style from the base style."*/
StyleSpan[] mSpans = et.getText().getSpans(0, et.length(), StyleSpan.class);
这是StyleSpan文档的链接。
如果您将各种跨度混合到集合/数组中,要选择您想要的跨度,您可以使用instanceof
来确定您拥有的跨度类型。此代码段将检查特定跨度mSpan
是否是 StyleSpan 的实例,然后打印其开始/结束索引和标志。标志是描述跨度结束行为方式的常量,例如:它们是否包括并将样式应用于开始/结束索引处的文本,或者仅应用于开始/结束范围内的索引处的文本输入)。
if (mSpan instanceof StyleSpan) {
int start = et.getSpanStart(mSpan);
int end = et.getSpanEnd(mSpan);
int flag = et.getSpanFlags(mSpan);
Log.i("SpannableString Spans", "Found StyleSpan at:\n" +
"Start: " + start +
"\n End: " + end +
"\n Flag(s): " + flag);
}