@@ -57,6 +57,7 @@ public class VariableTextInput extends LinearLayout {
5757 private Context mContext ;
5858 private SpannableString mSpannableString ;
5959 private Editable mEditable ;
60+
6061 public VariableTextInput (Context context ) {
6162 super (context );
6263 this .mContext = context ;
@@ -115,7 +116,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
115116 ignoreNextLocalTextChange = false ;
116117 return ;
117118 }
118- if (before == 1 && count == 0 && editText .getText () != null && mSpanLength > -1 ) {
119+ if (before == 1 && count == 0 && editText .getText () != null && mSpanLength > -1 && start - mSpanLength >= 0 ) {
119120 int length = mSpanLength ;
120121 mSpanLength = -1 ;
121122 editText .getText ().replace (start - length , start , "" );
@@ -216,9 +217,9 @@ private Editable handleSelectData() {
216217 if (!TextUtils .isEmpty (span .getRichTextBean ().name )) {
217218 text = span .getRichTextBean ().tag + span .getRichTextBean ().name ;
218219 }
219- int startIndex = mEditable .getSpanStart (span );
220- int endIndex = mEditable .getSpanEnd (span );
221- mEditable .replace (startIndex , endIndex , text );
220+ int spanStart = mEditable .getSpanStart (span );
221+ int spanEnd = mEditable .getSpanEnd (span );
222+ mEditable .replace (spanStart , spanEnd , text );
222223 }
223224 return mEditable ;
224225 }
@@ -289,7 +290,7 @@ previously we used setEnabled(false), but this would make text unselectable when
289290 public void focus () {
290291 editText .requestFocus ();
291292 InputMethodManager imm = (InputMethodManager ) getContext ().getSystemService (Context .INPUT_METHOD_SERVICE );
292- imm .showSoftInput (editText ,InputMethodManager .SHOW_IMPLICIT );
293+ imm .showSoftInput (editText , InputMethodManager .SHOW_IMPLICIT );
293294 }
294295
295296 public void blur () {
@@ -429,9 +430,8 @@ public void handleRichText(ReadableArray args) {
429430 switch (richTextBean .type ) {
430431 case 0 :
431432 //普通文本
432- if (!TextUtils .isEmpty (richTextBean .text )) {
433- editText .setText (richTextBean .text );
434- editText .setSelection (richTextBean .text .length ());
433+ if (editText .getText () != null && !TextUtils .isEmpty (richTextBean .text )) {
434+ editText .getText ().insert (editText .getSelectionStart (), richTextBean .text );
435435 }
436436 break ;
437437 case 1 :
@@ -486,29 +486,29 @@ public void insertEmoji(RichTextBean richTextBean) {
486486 int endIndex = startIndex + richTextBean .tag .length ();
487487 if (editText .getText () != null ) {
488488 editText .getText ().insert (startIndex , richTextBean .tag );
489+ Bitmap bitmap = BitmapFactory .decodeResource (getResources (), R .drawable .kuxiao );
490+ TextSpan imageSpan = new TextSpan (mContext , BitmapUtil .setBitmapSize (bitmap , editText .getTextSize ()), richTextBean );
491+ mSpannableString = SpannableString .valueOf (editText .getText ());
492+ mSpannableString .setSpan (imageSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
493+ editText .setText (mSpannableString );
494+ editText .setSelection (endIndex );
495+ editText .getText ().replace (startIndex , endIndex , richTextBean .content );
489496 }
490- Bitmap bitmap = BitmapFactory .decodeResource (getResources (), R .drawable .kuxiao );
491- TextSpan imageSpan = new TextSpan (mContext , BitmapUtil .setBitmapSize (bitmap , editText .getTextSize ()), richTextBean );
492- mSpannableString = SpannableString .valueOf (editText .getText ());
493- mSpannableString .setSpan (imageSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
494- editText .setText (mSpannableString );
495- editText .setSelection (endIndex );
496- editText .getText ().replace (startIndex , endIndex , richTextBean .content );
497497 }
498498
499499 private void insertMentions (RichTextBean richTextBean ) {
500500 int startIndex = editText .getSelectionStart ();
501501 int endIndex = startIndex + richTextBean .tag .length () + richTextBean .name .length ();
502502 if (editText .getText () != null ) {
503503 editText .getText ().insert (startIndex , richTextBean .tag + richTextBean .name );
504+ Bitmap bitmap = BitmapUtil .getTextBitmap (richTextBean .tag + richTextBean .name , editText .getTypeface (), editText .getTextSize (), richTextBean .color );
505+ TextSpan textSpan = new TextSpan (mContext , bitmap , richTextBean );
506+ mSpannableString = SpannableString .valueOf (editText .getText ());
507+ mSpannableString .setSpan (textSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
508+ editText .setText (mSpannableString );
509+ editText .setSelection (endIndex );
510+ editText .getText ().replace (startIndex , endIndex , richTextBean .content );
504511 }
505- Bitmap bitmap = BitmapUtil .getTextBitmap (richTextBean .tag + richTextBean .name , editText .getTypeface (), editText .getTextSize (), richTextBean .color );
506- TextSpan textSpan = new TextSpan (mContext , bitmap , richTextBean );
507- mSpannableString = SpannableString .valueOf (editText .getText ());
508- mSpannableString .setSpan (textSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
509- editText .setText (mSpannableString );
510- editText .setSelection (endIndex );
511- editText .getText ().replace (startIndex , endIndex , richTextBean .content );
512512 }
513513}
514514
0 commit comments