Android StrikeThrough范围不适用于空间

时间:2014-09-03 08:01:28

标签: android spannablestring strikethrough

最好我把我的问题作为一个例子

我在textview中有单词FREE 我将删除线(EXC,EXC)跨度应用于FREE这个词,所以我得到 FREE
然后我在字母之间插入空格,这就是问题,因为我得到了 F R E E 但我想 F R E E
它似乎只发生在空格(我也试过" \ u00a0"),因为我也尝试插入一个普通字符(L)并且没有问题,结果是 FLRLELE 而不是 F L R L E L E

感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您是按字符应用跨度字符还是应用于整个子字符串?

当我尝试前一种方法时,我遇到了同样的问题;但是当我改为后者时,它运作得很好。

Image Of Result

以下是我使用的代码的摘录。

if条件在子串周围添加删除线填充。

    //  ↑↑↑  Several layers of loops...  :-X

    mySubString = textview_Text.substring ( indexStart, indexEnd );

    for ( Integer charIndex = 0 ; charIndex < mySubString.length() ; charIndex++ )
        {
            charOfIndex = String.valueOf ( mySubString.charAt ( charIndex ) );

            if ( charIndex > 0 )
                { charOfIndex_Previous = String.valueOf ( mySubString.charAt ( charIndex - 1 ) ); }
            else
                { charOfIndex_Previous = charOfIndex; }

            if ( charIndex < mySubString.length() - 1 )
                { charOfIndex_Next = String.valueOf ( mySubString.charAt ( charIndex + 1 ) ); }
            else
                { charOfIndex_Next = charOfIndex; }

            if ( ( charOfIndex.equals ( charSpace ) )
            && ( ! charOfIndex_Next.equals ( charSpace ) ) )
                { spanStart = indexFromPreviousLoop + charIndex; }

            if ( ( ! charOfIndex_Previous.equals ( charSpace ) )
            && ( charOfIndex.equals ( charSpace ) ) )
                { spanEnd = indexFromPreviousLoop + charIndex + 1; }
        }

    mySpannable.setSpan ( new StrikethroughSpan (), spanStart, spanEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE );