【问题标题】:Last character gets unspanned after applying two spans on a selected text in edittext在edittext中的选定文本上应用两个跨度后,最后一个字符不跨度
【发布时间】:2018-01-04 15:59:09
【问题描述】:

这个问题很烦人,所以我会一点一点地追踪它,以便你完全理解它:-

首先我选择编辑文本中的最后一个单词,如下所示:-

到目前为止如此简单,然后我通过单击按钮(设置粗体跨度)使文本变为粗体,如下所示:-

下划线只是软键盘中的默认文本更正。然后我重新选择文本:-

然后,当我以相同的方式将其设置为斜体时(通过按下按钮设置斜体跨度),我得到了:-

最后一个字符从粗体中分离出来。这仅在我选择单词并且该单词位于编辑文本的end的特定情况下发生。 p>

我还发现,当为每个字符设置跨度时,如果整个单词都没有发生(粗体和斜体),则会出现此问题:-

//for each char
for (int i = 0; i < token.length(); i++) {//token is the word
SpannableString char = (SpannableString) token.subSequence(i, i + 1);

char.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), 0, 
char.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}

但如果没有出现全词问题:-

// for the whole word 

token.setSpan(new android.text.style.StyleSpan(Typeface.BOLD), 0, 
token.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}

当然,用户可以为字符设置跨度,因此问题仍然存在,否则如果在编辑文本末尾未选择该单词,则不会出现问题。

【问题讨论】:

    标签: android android-edittext spannablestring spanned


    【解决方案1】:

    我终于找到了一个解决方案,方法是在提取选择标记之前在最后一个索引之后添加一个空格字符。

    selectionStart = noteview.getSelectionStart();
    selectionEnd = noteview.getSelectionEnd();
    
    if(noteview.hasSelection()&&selectionEnd==noteview.length()) {
    SpannedString sp=SpannedString.valueOf(" ");
    edittext.setText(TextUtils.concat(edittext.getText(),sp));
    }
    

    有时最简单的解决方案就是最好的解决方案:)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多