android - EditText: sometimes all the Spans before the cursor are cleared -


as question states, keyboard action (only backspace seems this) clears spans have set before cursor.

here relevant bits of edittext:

// called constructors. private void init() {     setsingleline(false);     setimeoptions(editorinfo.ime_flag_no_extract_ui | editorinfo.ime_flag_no_enter_action);     setinputtype(inputtype.type_class_text | inputtype.type_text_flag_no_suggestions | inputtype.type_text_flag_multi_line);     settextisselectable(false);     setcustomselectionactionmodecallback(new actionmode.callback() {         public boolean oncreateactionmode(actionmode mode, menu menu) { return false; }         public boolean onprepareactionmode(actionmode mode, menu menu) { return false; }         public boolean onactionitemclicked(actionmode mode, menuitem item) { return false; }         public void ondestroyactionmode(actionmode mode) {}     });      addtextchangedlistener(new hashtagwatcher()); }   @override public boolean issuggestionsenabled() {     return false; }  public hashtagspan[] getspans(editable from) {     return from.getspans(0, from.length(), hashtagspan.class); }   private class hashtagwatcher implements textwatcher {      @override     public void beforetextchanged(charsequence s, int start, int oldlength, int newlength) {         synchronized (lock) {             hashtagspan[] spans = getspans(gettext());             log.e(tag, "beforetextchanged: num spans "+spans.length);             (int = 0; < spans.length; i++) {                 log.e(tag, "    span "+i+":");                 log.e(tag, "        starts @ "+gettext().getspanstart(spans[i]));                 log.e(tag, "        ends @ "+gettext().getspanend(spans[i]));             }         }     }      @override     public void aftertextchanged(editable result) {         synchronized (lock) {             hashtagspan[] spans = getspans(result);             log.e(tag, "aftertextchanged: num spans "+spans.length);             (int = 0; < spans.length; i++) {                 log.e(tag, "    span "+i+":");                 log.e(tag, "        starts @ "+result.getspanstart(spans[i]));                 log.e(tag, "        ends @ "+result.getspanend(spans[i]));             }         }     } } 

you can see logging number of hashtagspans before , after text has changed.

99% of times number of spans before , after equal. when using backspace @ positions, get:

// beforetextchanged triggered backspace action @ pos 7... 11-13 14:28:55.217 32601-32601 e/hashtaglayout: beforetextchanged: num spans 2: 11-13 14:28:55.217 32601-32601 e/hashtaglayout:     span 0: 11-13 14:28:55.217 32601-32601 e/hashtaglayout:         starts @ 0 11-13 14:28:55.217 32601-32601 e/hashtaglayout:         ends @ 3 11-13 14:28:55.217 32601-32601 e/hashtaglayout:     span 1: 11-13 14:28:55.217 32601-32601 e/hashtaglayout:         starts @ 3 11-13 14:28:55.217 32601-32601 e/hashtaglayout:         ends @ 7  // right after.. 11-13 14:28:55.224 32601-32601 e/hashtaglayout: aftertextchanged: num spans 0  

it makes no sense! did type backspace @ position 7, , before aftertextchanged() every span before position cleared.

how possible?

can related keyboard action? if how override behaviour? have tried playing inputconnection no results.

update

i think keyboard doing strange, clearing spans text. if disable auto-correction, (google stock keyboard):

enter image description here

everything starts working again. sucks. thought setting inputtype.type_text_flag_no_suggestions enough avoid ime strange behaviours.

so guess need ime expert now.

how can override behaviour keyboard auto-correction, (on backspaces mostly) clears every span before cursor position?

update 2

it works if leave keyboard settings enabled, remove inputtype.type_text_flag_multi_line. got hate android sometimes.. need multiline!


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -