Skip to content

Commit 1671dd6

Browse files
author
ellieshen
committed
feat: 修复changeAttributedText方法覆盖原有文本&容错处理
1 parent 657304a commit 1671dd6

File tree

1 file changed

+22
-22
lines changed

1 file changed

+22
-22
lines changed

android/src/main/java/com/variabletextinput/view/VariableTextInput.java

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)