2017-07-28 168 views
0

于选择的文本应用两个跨度后,这个问题是非常恼人所以我要多多跟踪下来的点点滴滴,所以你可以完全理解unspanned: -最后一个字符获取的EditText

首先,我选择的最后一个字在我的编辑文本像这样: -

enter image description here

到目前为止简单的话,我使文本加粗通过点击按钮(设定了一个大胆的跨度),像这样: -

enter image description here

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

enter image description here

然后,当我让斜体以同样的方式(通过按下一个按钮设置斜体跨度)我得到这样的: -

enter image description here

最后字符不会从粗体中突出。这只发生在这种特定情况下,当我选择这个单词和单词在末尾的编辑文本。

而且我发现,当跨度为每个字符设置,如果其对整个单词它不会发生,就会出现此问题(对于粗体和斜体): -

//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,所以这个问题还是其他相关的,如果在编辑文本的到底是不是选择的话不会出现问题。

回答

0

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

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

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

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