0

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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

最后一个字符从粗体中分离出来。这只发生在这种特定情况下,当我选择单词并且单词位于编辑文本的末尾时。

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

//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);
}

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

4

1 回答 1

0

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

selectionStart = noteview.getSelectionStart();
selectionEnd = noteview.getSelectionEnd();

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

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

于 2017-07-28T19:42:32.053 回答