2017-07-28 2 views
0

Dieses Problem ist ziemlich ärgerlich, so Iam es nach unten nach und nach verfolgen, gehen, so dass Sie es verstehen können: -Letztes Zeichen nach der Anwendung von zwei Spannen auf einen ausgewählten Text in EditText nicht gesplitteten wird

Zuerst habe ich wählen Sie das letzte Wort in meinem Text bearbeiten wie folgt: -

enter image description here

so weit, so einfach dann mache ich den Text fett durch einen Knopf (Einstellung einer fett Spanne) klicken wie folgt: -

enter image description here

Die Unterstreichung ist nur die Standardtextkorrektur im Softkeyboard. Dann wählen Sie erneut ich den Text: -

enter image description here

dann, wenn ich es auf die gleiche Weise kursiv (italic Spanne Einstellung per Knopfdruck) bekomme ich diese: -

enter image description here

der letzte Das Zeichen wird unspannt von fett. Dies geschieht nur in dieser speziellen Situation, wenn ich wählen Sie das Wort und das Wort ist an der Ende des Editiertext.

Auch fand ich heraus, dass dieses Problem tritt auf, wenn die Spannen für die einzelnen Zeichen gesetzt werden, wenn sein für das ganze Wort kommt es nicht vor (sowohl fett und kursiv): -

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

Aber wenn ganze Wortproblem nicht geschieht: -

// for the whole word 

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

Aber natürlich kann der Benutzer Spannweiten für einen char so eingestellt, dass das Problem immer noch relevant ist sonst kein Problem, wenn das Wort nicht am Ende des Bearbeitungs Textes ausgewählt ist.

Antwort

0

Ich habe endlich eine Lösung gefunden, indem Sie ein Leerzeichen nach dem letzten Index hinzufügen, bevor Sie das Auswahl-Token extrahieren.

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

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

Manchmal ist die einfachste Lösung ist die beste Lösung :).

Verwandte Themen