Rah*_*han 9 android spannablestring
我已将SpannableString设置为EditText,现在我想从EditText获取此文本并获取其标记信息.我试过这样的
SpannableStringBuilder spanStr = (SpannableStringBuilder) et.getText();
int boldIndex = spanStr.getSpanStart(new StyleSpan(Typeface.BOLD));
int italicIndex = spanStr.getSpanStart(new StyleSpan(Typeface.ITALIC));
Run Code Online (Sandbox Code Playgroud)
但它为粗体和斜体提供了索引-1,尽管它显示的是带斜体和粗体的文本.
请帮忙.
KMD*_*Dev 10
从您发布的代码中,您将新的跨度传递给spanStr并要求它们找到它们.您需要引用实际应用的那些跨度的实例.如果这不可行或者您不想直接跟踪跨度,则只需调用 getSpans即可应用所有跨距.然后,您可以根据需要过滤该数组.
如果您不特别关注跨度,您也可以调用Html.toHtml(spanStr)来获取HTML标记版本.
编辑:添加代码示例
这将抓住你想要的所有应用的StyleSpans.
/* 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);
Run Code Online (Sandbox Code Playgroud)
这是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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9625 次 |
| 最近记录: |