如何在Android中的跨距字符串或跨距字符串中循环跨距

如何在Android中的跨距字符串或跨距字符串中循环跨距,android,loops,spannablestring,spanned,Android,Loops,Spannablestring,Spanned,如果我有一个跨距字符串(或跨距字符串) 如何循环通过结果字符串的跨距?按顺序循环通过跨距 您可以使用getspan获取span或Spannable字符串中的span数组。但是,只需在getspan结果中循环即可。为了让它们井然有序,你可以使用 下面是一个带有跨距的示例,与问题中的示例类似。(ASpannableString的工作原理相同。)绿线显示span转换的位置。默认情况下,文本为黑色 该代码查找下一个跨距转换,然后获取当前范围内的所有跨距 int next; for (int i =

如果我有一个
跨距字符串
(或
跨距字符串

如何循环通过结果
字符串的跨距?

按顺序循环通过跨距 您可以使用
getspan
获取
span
Spannable
字符串中的span数组。但是,只需在
getspan
结果中循环即可。为了让它们井然有序,你可以使用

下面是一个带有
跨距的示例,与问题中的示例类似。(A
SpannableString
的工作原理相同。)绿线显示span转换的位置。默认情况下,文本为黑色

该代码查找下一个跨距转换,然后获取当前范围内的所有跨距

int next;
for (int i = 0; i < spannableString.length(); i = next) {

    // find the next span transition
    next = spannableString.nextSpanTransition(i, spannedString.length(), CharacterStyle.class);

    // get all spans in this range
    int numOfSpans = 0;
    CharacterStyle[] spans = spannableString.getSpans(i, next, CharacterStyle.class);
    for(int j = 0; j < spans.length; j++) {
        numOfSpans++;
    }

    Log.i("TAG", "spans from " + i + " to " + next + ": " + numOfSpans);
}
谢谢你的创意

跨度类型 通常,当在跨度中循环时,您会选择某种类型的跨度。例如,如果要删除所有前景色范围,可以执行以下操作:

// get spans
ForegroundColorSpan[] spans = spannableString.getSpans(0, spannableString.length(), ForegroundColorSpan.class);

// loop through spans
for (ForegroundColorSpan span : spans) {
    spannableString.removeSpan(span);
}
请注意,这不适用于
跨距字符串
,因为
跨距字符串
中的跨距是不可变的(请参阅)

如果要获取任何类型的所有跨度,可以将该类型设置为
Object.class

Object[] spans = spannableString.getSpans(0, spannableString.length(), Object.class);
如果需要影响字符级外观的所有跨距,可以使用
CharacterStyle.class
。如果在循环中希望进一步将跨度限制为属于
MetricAffectingSpan
的跨度,可以这样做

CharacterStyle[] spans = spannableString.getSpans(0, spannableString.length(), CharacterStyle.class);
for (CharacterStyle span : spans) {
    if (span instanceof MetricAffectingSpan) {
        // do something
    }
}
下面是跨度类型的一般层次分解。它可能不完整。阅读了解更多信息

Object
    CharacterStyle
        BackgroundColorSpan
        ClickableSpan
            URLSpan
        ForegroundColorSpan
        MaskFilterSpan
        StrikethroughSpan
        SuggestionSpan
        UnderlineSpan 
        MetricAffectingSpan
            AbsoluteSizeSpan
            LocaleSpan
            RelativeSizeSpan
            ReplacementSpan
                DynamicDrawableSpan
                    ImageSpan 
            ScaleXSpan
            StyleSpan
            SubscriptSpan
            SuperscriptSpan
            TextAppearanceSpan
            TypefaceSpan 
    ParagraphStyle
        AlignmentSpan
            AlignmentSpan.Standard
        BulletSpan
        DrawableMarginSpan
        IconMarginSpan
        LeadingMarginSpan
            LeadingMarginSpan.LeadingMarginSpan2
            LeadingMarginSpan.Standard
        LineBackgroundSpan
        LineHeightSpan
            LineHeightSpan.WithDensity
        QuoteSpan
        TabStopSpan
            TabStopSpan.Standard
        WrapTogetherSpan
CharacterStyle[] spans = spannableString.getSpans(0, spannableString.length(), CharacterStyle.class);
for (CharacterStyle span : spans) {
    if (span instanceof MetricAffectingSpan) {
        // do something
    }
}
Object
    CharacterStyle
        BackgroundColorSpan
        ClickableSpan
            URLSpan
        ForegroundColorSpan
        MaskFilterSpan
        StrikethroughSpan
        SuggestionSpan
        UnderlineSpan 
        MetricAffectingSpan
            AbsoluteSizeSpan
            LocaleSpan
            RelativeSizeSpan
            ReplacementSpan
                DynamicDrawableSpan
                    ImageSpan 
            ScaleXSpan
            StyleSpan
            SubscriptSpan
            SuperscriptSpan
            TextAppearanceSpan
            TypefaceSpan 
    ParagraphStyle
        AlignmentSpan
            AlignmentSpan.Standard
        BulletSpan
        DrawableMarginSpan
        IconMarginSpan
        LeadingMarginSpan
            LeadingMarginSpan.LeadingMarginSpan2
            LeadingMarginSpan.Standard
        LineBackgroundSpan
        LineHeightSpan
            LineHeightSpan.WithDensity
        QuoteSpan
        TabStopSpan
            TabStopSpan.Standard
        WrapTogetherSpan